method

link_to_function

link_to_function(name, *args, &block)
public

Returns a link of the given name that will trigger a JavaScript function using the onclick handler and return false after the fact.

The first argument name is used as the link text.

The next arguments are optional and may include the javascript function definition and a hash of html_options.

The function argument can be omitted in favor of an update_page block, which evaluates to a string when the template is rendered (instead of making an Ajax request first).

The html_options will accept a hash of html attributes for the link tag. Some examples are :class => "nav_button", :id => "articles_nav_button"

Note: if you choose to specify the javascript function in a block, but would like to pass html_options, set the function parameter to nil

Examples:

  link_to_function "Greeting", "alert('Hello world!')"
    Produces:
      <a onclick="alert('Hello world!'); return false;" href="#">Greeting</a>

  link_to_function(image_tag("delete"), "if (confirm('Really?')) do_delete()")
    Produces:
      <a onclick="if (confirm('Really?')) do_delete(); return false;" href="#">
        <img src="/images/delete.png?" alt="Delete"/>
      </a>

  link_to_function("Show me more", nil, :id => "more_link") do |page|
    page[:details].visual_effect  :toggle_blind
    page[:more_link].replace_html "Show me less"
  end
    Produces:
      <a href="#" id="more_link" onclick="try {
        $(&quot;details&quot;).visualEffect(&quot;toggle_blind&quot;);
        $(&quot;more_link&quot;).update(&quot;Show me less&quot;);
      }
      catch (e) {
        alert('RJS error:\n\n' + e.toString());
        alert('$(\&quot;details\&quot;).visualEffect(\&quot;toggle_blind\&quot;);
        \n$(\&quot;more_link\&quot;).update(\&quot;Show me less\&quot;);');
        throw e
      };
      return false;">Show me more</a>

2Notes

error in block code example

freegenie · Jul 2, 20087 thanks

I guess there's an error in this part of the code:

link_to_function("Show me more", nil, :id => "more_link") do |page| page[:details].visual_effect :toggle_blind page[:more_link].replace_html "Show me less" end

It doesn't work. It should be:

link_to_function("Show me more", nil, :id => "more_link") do |page| page[:details].toggle "Blind" page[:more_link].replace_html "Show me less" end

Using Rails 2.1.0

Another solution for visual_effect in code block example in link_to_remote

dovadi · Jul 23, 2008

Update: Code block example in link_to_function not link_to_remote (can't edit subject annymore :( )

This doesn't work:

====

page[:details].visual_effect :toggle_blind

My solution:

====

page.visual_effect :toggle_blind, 'details'