2012-05-13 4 views
2

なぜこのテキストをjavascript/jqueryに渡さないのですか? @i[:error]には文字列が含まれているため、コンソールでその文字を印刷できます。Ruby - Rails - テキストをjavascriptに渡す

js.erbファイル -

<% if @i[:error] != "" %> 
<% puts "--> " + @i[:error] %> 
#--> error 
#Validation error(s): 
#- Item Is not defined or blank. # that's the error string in @i[:error] 

$(function() { 
$("#error_message").attr("class", "message_error"); 
$('#error').text("<%= @i[:error]%>"); #Not working for @i[:error] 
#$('#error').text("<%= "#{@i[:error]}"%>");#Not working for @i[:error] 

#$('#error').text("Test"); #This is working 
#$('#error').text("<%= "?????"%>"); #This is working 
}); 
<% else %> 
........#fine here 
<% end %> 

答えて

1

はい、おそらく改行のためです。 escape_javascriptを使用して修正できます。

JavaScript セグメントのキャリッジリターンと一重引用符と二重引用符をエスケープします。

ので:

$('#error').text("<%= escape_javascript(@i[:error]) %>"); 
+0

うん、そうだった。改行が問題の原因となっていました。あなたはそれを解決しました。 –

0

デバッガは問題を理解するために容易になるだろうと言うものを指定した場合。 ERBビューのこのコードは正常に動作します:文字列の虚しさを空白によってチェックされていることを

<% @i = {} %> 
<% @i[:error] = "Error" %> 

<% unless @i[:error].blank? %> 
    <script> 
    $(document).ready(function() { 
     $('#error').text('<%= @i[:error] %>'); // Works fine 
    }); 
    </script> 
<% end %> 

ご注意を!メソッドでは、!=の演算子を使用するよりもはるかに良く見えると思います。

+0

が間違っているのか分かりません。私はあなたの変更を試みたが運がない。 –

+0

これは、JavaScriptが受け入れることができない文字列の改行のためにできますか? –