Provides functionality for working with JavaScript in your views.
For information on using Ajax, see ActionView::Helpers::PrototypeHelper.
For information on using controls and visual effects, see ActionView::Helpers::ScriptaculousHelper.
Rails includes the Prototype JavaScript framework and the Scriptaculous JavaScript controls and visual effects library. If you wish to use these libraries and their helpers (ActionView::Helpers::PrototypeHelper and ActionView::Helpers::ScriptaculousHelper), you must do one of the following:
Use <%= javascript_include_tag :defaults %>
in the HEAD
section of your page (recommended): This function will return references to
the JavaScript files created by the rails
command in your
public/javascripts
directory. Using it is recommended as the
browser can then cache the libraries instead of fetching all the functions
anew on every request.
Use <%= javascript_include_tag 'prototype' %>
: As above,
but will only include the Prototype core library, which means you are able
to use all basic AJAX functionality. For the Scriptaculous-based JavaScript
helpers, like visual effects, autocompletion, drag and drop and so on, you
should use the method described above.
For documentation on javascript_include_tag
see ActionView::Helpers::AssetTagHelper.
Escape carrier returns and single and double quotes for JavaScript segments.
# File lib/action_view/helpers/javascript_helper.rb, line 50 def escape_javascript(javascript) if javascript result = javascript.gsub(%r(\\|<\/|\r\n|[\n\r"'])/) {|match| JS_ESCAPE_MAP[match] } javascript.html_safe? ? result.html_safe : result else '' end end
Returns a JavaScript tag with the content
inside. Example:
javascript_tag "alert('All is good')"
Returns:
<script type="text/javascript"> //<![CDATA[ alert('All is good') //]]> </script>
html_options
may be a hash of attributes for the
<script>
tag. Example:
javascript_tag "alert('All is good')", :defer => 'defer' # => <script defer="defer" type="text/javascript">alert('All is good')</script>
Instead of passing the content as an argument, you can also use a block in
which case, you pass your html_options
as the first parameter.
<%= javascript_tag :defer => 'defer' do -%> alert('All is good') <% end -%>
# File lib/action_view/helpers/javascript_helper.rb, line 79 def javascript_tag(content_or_options_with_block = nil, html_options = {}, &block) content = if block_given? html_options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash) capture(&block) else content_or_options_with_block end content_tag(:script, javascript_cdata_section(content), html_options.merge(:type => Mime::JS)) end
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<%ra> link_to_function(image_tag("delete"), "if (confirm('Really?')) do_delete()") Produces: <a onclick="if (confirm('Really?')) do_delete(); return false;" href="#"> <img src="/mages/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 { $("details").visualEffect("toggle_blind"); $("more_link").update("Show me less"); } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('$(\"details\").visualEffect(\"toggle_blind\"); \n$(\"more_link\").update(\"Show me less\");'); throw e }; return false;">Show me more</a>
# File lib/action_view/helpers/javascript_helper.rb, line 172 def link_to_function(name, *args, &block) html_options = args.extract_options!.symbolize_keys function = block_given? ? update_page(&block) : args[0] || '' onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function}; return false;" href = html_options[:href] || '#' content_tag(:a, name, html_options.merge(:href => href, :onclick => onclick)) end