27453


Railsのテンプレート内に記述したJavascript文を、レンダリング時に実行されないようにしたいと考えています。

現在は、Javascriptの仕様なのか、以下のようなソースコードがある時、テンプレートがレンダリングされた時に、if文内でRubyを用いて書いた処理が実行されてしまいます。

[code]

    <script type ="text/javascript">
    $("#<%= id %> .button").click(function()
    {
        if ("<%= id %>"== $(this).parents().attr("id") )
        {
            <% puts "クリック時のみ動作させたい処理" %>
        }
    });
    </script>
    
[/code]

実現したい処理としては、テンプレートのレンダリング時にはif文内の処理を行わせず、buttonクラスをクリックした時のみ処理させたいと思っております。

良い方法があれば、ご教授頂ければと思っております。宜しくお願いします。


CC BY-SA 3.0
2016-07-07T08:14:23.863
27413
2016-07-08T06:18:19.803
2016-07-08T04:03:41.547
17091
17091
question
javascript ruby-on-rails ruby
Railsのテンプレート中に記述したJavascriptを読み込み時に実行させない方法


Javascriptがどうこうというより、Railsのテンプレートを誤解されています。

[code]

    <script type ="text/javascript">
    $("#<%= id %> .button").click(function()
    {
        if ("<%= id %>"== $(this).parents().attr("id") )
        {
            <% puts "クリック時のみ動作させたい処理" %>
        }
    });
    </script>
    
[/code]

このテンプレート中に `<% %>` で書いたRubyのコードは、レンダリングの際に実行されるため、次のようなHTMLがブラウザに送られることになります。

[code]

    <script type ="text/javascript">
    $("#foo123 .button").click(function()
    {
        if ("foo123"== $(this).parents().attr("id") )
        {
            クリック時のみ動作させたい処理
        }
    });
    </script>
    
[/code]

レンダリング処理では単にテンプレートファイルに `<% %>`
が現れたらそのコードを実行しているだけで、それがJavascriptコードの一部なのか、まして関数や if
文の中なのかということは考慮しませんから、このような挙動になります。

ボタンを押した時にRubyを実行したいとなると、コントローラの別アクションや別テンプレートにその処理を書いておき、Ajaxで呼び出す必要があるように思います。  
（Railsでの具体的な方法については詳しくないので調べていただけると）


CC BY-SA 3.0
2016-07-08T06:18:19.803
27453
2016-07-08T06:18:19.803
8000
27413
answer