更新:
如果你看看我在下面更新中粘貼的javascript代碼,我用了單引號關於variety.name變量。我想我只是在做一個教程。原來,當我將它們切換到雙引號時,一切正常。問題:這是一個穩定的解決方案嗎?或者是否還會更好地實施escape_javascript
幫手?
我有一個Rails應用程序,用戶可以在其中輸入字段的值。其他用戶可以通過從下拉列表中選擇該值,將其添加到他們的個人資料中。我正在使用collection_select助手呈現下拉菜單。我有一點JavaScript與此下拉列表綁定,可識別父級選擇,然後顯示特定的子選擇。
問題是某些用戶輸入的值包含撇號。螢火蟲告訴我撇號正在打破JavaScript。當我手動刪除所有的測試撇號,JavaScript的功能完美。
今天早些時候,我問了一個關於在HTML文本中轉義&的問題,現在我知道你使用了<%= h%>。從我在網上閱讀的內容來看,<%= h%>不會逃避撇號。如果我錯了,並且<%= h%>確實會跳過單引號,那麼我不知道如何使用collection_select實現它,因爲我已經嘗試了許多組合,但都沒有工作。
這裏的代碼創建下拉行:
<%= season_form.collection_select :variety_id, Variety.find(:all), :id, :name, :prompt => "Optional: Variety" %>
謝謝!
UPDATE
這是我的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]);
}
});
}
我可以看到使用文本框中的值的JavaScript嗎? – 2009-10-13 03:26:08
編輯我的帖子。我認爲你需要在你的javascript中轉義。不是服務器端代碼。轉義點就是設法正確顯示你將要使用的格式。所以,javascript應該逃避。看到我編輯的評論。 – 2009-10-13 04:02:46
已將javascript添加到原始問題中作爲更新。往上看。 – MikeH 2009-10-13 13:40:05