Calling JavaScript


#1

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:

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

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

Anyone see something wrong?

Thanks.


#2

On Jun 2, 2009, at 2:23 PM, Tyler K. wrote:

   var next_week = 0;

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


#3

Philip H. wrote:

On Jun 2, 2009, at 2:23 PM, Tyler K. wrote:

   var next_week = 0;

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:

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?


#4

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


#5

Tyler K. wrote:

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

Does anyone know why this is throwing syntax errors?


#6

2009/6/3 Tyler K. removed_email_address@domain.invalid:

    //}

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


#7

Colin L. wrote:

2009/6/3 Tyler K. removed_email_address@domain.invalid:

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:

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.


#8

Tyler K. 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.


#9

2009/6/4 Colin L. removed_email_address@domain.invalid:

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


#10

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

Colin

2009/6/4 Mk 27 removed_email_address@domain.invalid:


#11

Tyler K. 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.


#12

Colin L. wrote:

2009/6/4 Colin L. removed_email_address@domain.invalid:

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:


#13

On Jun 4, 5:53 pm, Tyler K. removed_email_address@domain.invalid
wrote:

Here it is! Maybe something is formatted incorrectly then?

vim public/javascripts/test.js

javascript files shouldn’t contain the tags: they’re pure
JS, not markup

Fred


#14

Frederick C. wrote:

On Jun 4, 5:53�pm, Tyler K. removed_email_address@domain.invalid
wrote:

Here it is! Maybe something is formatted incorrectly then?

vim public/javascripts/test.js

javascript files shouldn’t contain the tags: they’re pure
JS, not markup

Fred

Aha! Thank you Fred. This solved it.


#15

Mk 27 wrote:

Tyler K. 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


vim app/views/layouts/labs.html.erb

<%= javascript_include_tag :defaults %>
<%= javascript_include_tag ‘test’ %>


vim app/views/labs/show.html.erb

<%= link_to_function ‘Next Week Test’, “testjs()” %>


The errors:

missing } in XML expression
[Break on this error] i = i + 1;\n
test.js?..244134114 (line 5)

The second error, below, shows up when I click on the ‘Next Week’ link
within the show view.

testjs is not defined
[Break on this error] testjs();

I don’t see anything wrong, everything should be included.


#16

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: