escape_javascript
助手仍然会更好吗?
问题是某些用户正在输入包含撇号的值。 Firebug告诉我撇号打破了javascript。当我手动删除所有撇号进行测试时,javascript功能完美。
今天早些时候,我问了一个关于在渲染的html文本中转换&符号的问题,现在我知道你使用<%= h%>。根据我在网上看到的内容,<%= h%>不逃避撇号。如果我错了并且<%= h%>我不知道如何使用collection_select实现它,因为我尝试了许多组合,但没有一个能够工作。
以下是创建下拉列表的代码行:
<%= season_form.collection_select :variety_id, Variety.find(:all), :id, :name, :prompt => "Optional: Variety" %>
谢谢!
这是我的javascript。我有一个商品层次。作为解释:此javascript允许我的用户从下拉列表中选择产品,然后自动将第二个下拉列表限制为仅属于用户选择的任何产品的那些品种。它的效果很好,只要品种名称中没有撇号。
另外,我尝试在几乎所有元素前添加escape_javascript,但没有一个解决了问题。 Rails文档在这个帮助器上是不存在的,因此在示例方面没有太多可继续性。谢谢你的帮助!
var varieties = new Array();
<% for variety in @varieties -%>
varieties.push(new Array(<%= variety.product_id %>, '<%=h variety.name %>', <%= variety.id %>));
<% end -%>
function collectionSelected(e) {
product_id = e.getValue();
options = e.next(1).options;
options.length = 1;
varieties.each(function(variety) {
if (variety[0] == product_id) {
options[options.length] = new Option(variety[1], variety[2]);
}
});
}
答案 0 :(得分:0)
编辑:
我刚刚意识到你不应该在你的服务器端代码中逃脱。你应该逃避javascript代码。有关javascript转义功能,请参阅此处:http://www.w3schools.com/jsref/jsref_escape.asp
你应该在api中使用escape_javascript(): http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#M001758
答案 1 :(得分:0)
您可以使用gsub并替换您想要的内容。
我通常使用select helper并将其传入。我不认为collection_select使用它。
Variety.all.collect{|v| [v.id, v.name.gsub("'", "\'")]}
对于collection_select,您可以在使用之前“修复”记录。
varieties = Variety.all.map{|v| v.name.gsub("'", "\'")}
collection_select(:variety_id, varieties, :id, :name, :prompt => "Optional: Variety")