module ActionView::Helpers::JavaScriptHelper - actionpack-3.2.22 Documentation

# module ActionView::Helpers::JavaScriptHelper

### Constants

JS_ESCAPE_MAP

### Public Instance Methods

button_to_function(name, function=nil, html_options={}) click to toggle source

Returns a button whose `onclick` handler triggers the passed JavaScript.

The helper receives a name, JavaScript code, and an optional hash of HTML options. The name is used as button label and the JavaScript code goes into its `onclick` attribute. If `html_options` has an `:onclick`, that one is put before `function`.

    button_to_function "Greeting", "alert('Hello world!')", :class => "ok"
    # => <input class="ok" onclick="alert('Hello world!');" type="button" value="Greeting" />

    # File lib/action_view/helpers/javascript_helper.rb, line 84
    def button_to_function(name, function=nil, html_options={})
      onclick = "#{"#{html_options[:onclick]}; " if html_options[:onclick]}#{function};"

      tag(:input, html_options.merge(:type => 'button', :value => name, :onclick => onclick))
    end

escape_javascript(javascript) click to toggle source

Escapes carriage returns and single and double quotes for JavaScript segments.

Also available through the alias j(). This is particularly helpful in JavaScript responses, like:

    $('some_element').replaceWith('<%=j render 'some/element_template' %>');

    # File lib/action_view/helpers/javascript_helper.rb, line 28
    def escape_javascript(javascript)
      if javascript
        result = javascript.gsub(/(\|<\/|\r\n|\342\200\250|[\n\r"'])/u) {|match| JS_ESCAPE_MAP[match] }
        javascript.html_safe? ? result.html_safe : result
      else
        ''
      end
    end

Also aliased as: j
j(javascript)
Alias for: escape_javascript
javascript_tag(content_or_options_with_block = nil, html_options = {}, &block) click to toggle source

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 59
    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

link_to_function(name, function, html_options={}) click to toggle source

Returns a link whose `onclick` handler triggers the passed JavaScript.

The helper receives a name, JavaScript code, and an optional hash of HTML options. The name is used as the link text and the JavaScript code goes into the `onclick` attribute. If `html_options` has an `:onclick`, that one is put before `function`. Once all the JavaScript is set, the helper appends “; return false;”.

The `href` attribute of the tag is set to “#” unless `html_options` has one.

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

    # File lib/action_view/helpers/javascript_helper.rb, line 102
    def link_to_function(name, function, html_options={})
      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