Calling JavaScript

Hey All,

I'm trying to call a javascript function from my view:

<%= link_to_function 'Next Week Test', "testjs()" %>

Which *should* be calling this:

<script type="text/javascript">
        var next_week = 0;
        function testjs()
        {
                //next_week = next_week + 1;
                 alert('Next week' + next-week);
                //return next_week;
        }
</script>

I've included /public/javascripts/test.js in my layout, it shows up as
included in the source of the page:

<script src="/javascripts/test.js?1243524559"
type="text/javascript"></script>

However, it never seems to call the function resulting in the alert.

Anyone see something wrong?

Thanks.

alert('Next week' + next-week);
                      ^^^^^^^^^

That should be "next_week".

Odds are you're getting a JS error, but not seeing it. Turn on whatever debugging you might have (firebug in firefox, or safari's debug inspector) and it will make this easy to catch.

-philip

Philip Hallstrom wrote:

       var next_week = 0;

<script src="/javascripts/test.js?1243524559"
type="text/javascript"></script>

However, it never seems to call the function resulting in the alert.

Anyone see something wrong?

  alert('Next week' + next-week);
                      ^^^^^^^^^

That should be "next_week".

Odds are you're getting a JS error, but not seeing it. Turn on
whatever debugging you might have (firebug in firefox, or safari's
debug inspector) and it will make this easy to catch.

-philip

I fixed this and turned on firebug.

I am now seeing the following error:

missing } in XML expression
[Break on this error] alert('test');\n

I tried just the following to simplify things:

<script type="text/javascript">
        //var next_week = 0;
        function testjs()
        {
        }

                //next_week = next_week + 1;
                //alert("next_week");
                //alert('test');
                //return next_week;
        //}
</script>

Which calls an empty function.

Now I am seeing the following:

syntax error
[Break on this error] }\n

Why is this the case? How could there be a syntax error?

As a side note, link_to_function is the work of the devil. You should
really be adding the listener unobtrusively using something like
jquery/lowpro/prototype rather than defining it inline like that.

Glenn

Philip Hallstrom wrote:

   var next\_week = 0;

<script src="/javascripts/test.js?1243524559"
type="text/javascript"></script>

However, it never seems to call the function resulting in the alert.

Anyone see something wrong?

alert('Next week' + next-week);
^^^^^^^^^

That should be "next_week".

Odds are you're getting a JS error, but not seeing it. Turn on
whatever debugging you might have (firebug in firefox, or safari's
debug inspector) and it will make this easy to catch.

-philip

I fixed this and turned on firebug.

I am now seeing the following error:

missing } in XML expression
[Break on this error] alert('test');\n

I tried just the following to simplify things:

<script type="text/javascript">
//var next_week = 0;
function testjs()
{
}

           //next\_week = next\_week \+ 1;
           //alert\(&quot;next\_week&quot;\);
           //alert\(&#39;test&#39;\);
           //return next\_week;
   //\}

</script>

Which calls an empty function.

Now I am seeing the following:

syntax error
[Break on this error] }\n

Why is this the case? How could there be a syntax error?

I don't know why the syntax error, but if I had this problem I would
keep deleting stuff till it goes away, then add it back to find
exactly the problem. I have pasted your script into a page of mine
and it does not give an error. Which line is the error reported on?
Are you sure the script is not inside another tag that is confusing
it? Try moving it out to the top level. Keep trying things till the
error goes away then work out what causes it.

Colin

Colin Law wrote:

I don't know why the syntax error, but if I had this problem I would
keep deleting stuff till it goes away, then add it back to find
exactly the problem. I have pasted your script into a page of mine
and it does not give an error. Which line is the error reported on?
Are you sure the script is not inside another tag that is confusing
it? Try moving it out to the top level. Keep trying things till the
error goes away then work out what causes it.

Colin

Here is something interesting:

When I click on the link I see this error in firebug:

testjs is not defined
onclick(click clientX=71, clientY=479)HTsSTthn...RWQ%3D%3D (line 2)
[Break on this error] testjs();

Could it be that test.js is not being included? I see this when
checking the source:

<script src="/javascripts/test.js?1244041352"
type="text/javascript"></script>

So I would think that the function 'testjs' defined in test.js would be
defined. I tried moving the function into application.js with the same
result.

Tyler Knappe wrote:

So I would think that the function 'testjs' defined in test.js would be
defined. I tried moving the function into application.js with the same
result.

and you have

<%= javascript_include_tag :defaults %>

in the header?

ps. IMO rails will be a very awkward place to learn javascript, if that
is what you are doing.

To include a javascript file of your own use
<%= javascript_include_tag 'testjs' %>
where test.js is in public/javascripts

Colin

To include a javascript file of your own use
<%= javascript_include_tag 'testjs' %>
where test.js is in public/javascripts

Correction
<%= javascript_include_tag 'test' %>
where test.js is in public/javascripts

Colin Law wrote:

To include a javascript file of your own use
<%= javascript_include_tag 'testjs' %>
where test.js is in public/javascripts

Correction
<%= javascript_include_tag 'test' %>
where test.js is in public/javascripts

Okay, I went and changed it to this:

<%= javascript_include_tag :defaults %>
<%= javascript_include_tag 'test' %>

Where I am now including 'test' rather than 'testjs'. I changed this in
my ~/app/view/layouts/[controller name].html.erb file.

I'm still getting the same error.

My idea was to not really use JS at all, because of the headache it
seems to always be, but here I am! :frowning:

Mk 27 wrote:

Tyler Knappe wrote:

<%= javascript_include_tag :defaults %>
<%= javascript_include_tag 'test' %>

If testjs() is in application.js or public/javascript/test.js it should
respond if it is formatted correctly.

Here it is! Maybe something is formatted incorrectly then?

vim public/javascripts/test.js

<script type="text/javascript">
        var i = 0;
        function testjs()
        {
                i = i + 1;
                //next_week = next_week + 1;
                //alert("next_week");
                //alert('test');
                //return next_week;
        }
</script>

javascript files shouldn't contain the <script> tags: they're pure
JS, not markup

Fred

Actually I wanted to thank everyone for helping me out. I know it
wasn't a very fun experience, but it sure was enlightening for me. :slight_smile: