Adding conditions (if-else) to RJS template

I tried following Ryan Bates' railscast on rjs tips (#45 RJS Tips - RailsCasts) and apply his method of using if-else inside the rjs template, but can't seem to get it to work. Basically, I'm trying to toggle the text on a link when it's clicked (test.js.rjs):

page << "if ($('test_link').value == 'one' {" page.replace_html 'test_link', 'two' page << "} else {" page.replace_html 'test_link', 'one' page << "}"

I believe I have the necessary view and controller code:

<%= link_to_remote 'one', :url => { :action => 'test' } %>

and

def test   respond_to do |format|     format.js   end end

Syntax error - does not compute.

Look closely and see how you forgot the “)” after “‘one’”. Javascript is very punctuation sensitive, you need to pay special attention to it. Also, use Firefox for testing and install Firebug to debug your javascript. It would have indicated this error.

Best regards

Peter De Berdt

Then add before your first “page <<” statement:

page << “console.log($(‘test_link’));”

page << “console.log($(‘test_link’).value);”

There must be something wrong with the value you are trying to access then.

Best regards

Peter De Berdt

Syntax error - does not compute.

Look closely and see how you forgot the ")" after "'one'". Javascript is very punctuation sensitive, you need to pay special attention to it. Also, use Firefox for testing and install Firebug to debug your javascript. It would have indicated this error.

Thanks Peter. I changed my code to include the closing parenthesis,
but it seems to not work still. I am using firefox w/ firebug, although
I'm still not that seasoned in debugging js - I'll read up on that. Here's what I have now:

Do links even have a value attribute? It doesn't seem to contain the
links text if that's what you were expecting.

Fred

Do links even have a value attribute? It doesn't seem to contain the links text if that's what you were expecting.

Fred

Fred - I tried using $('test_link').innerHtml == 'one', but the result is the same.

That should be: innerHTML

Fred