2016-01-20 85 views
0

我在rails應用程序中有一個表單,用於選擇城市並保存它的ID。使用Javascript在hidden_​​field_tag中保存值

= select_tag 'building[city_id]', 
options_for_select(cities.map{|c| [c.name, c.id]}), 
onchange: "myFunction();", include_blank: "Choose city" 

只要用戶從選擇的標籤中選擇了某個東西,我想在hidden_​​field_tag中保存一個城市名稱。如何用Javascript實現這個?

我對JavaScript很陌生,請不要刻薄判斷。

+0

爲什麼要將名稱保存在單獨的字段中,當它來自您的模型? –

+0

我可以從一個select_tag保存名稱***和*** ID嗎? – Zelenka

+3

不,瀏覽器只會將'option'標記的'value'傳遞給服務器。但是我仍然不知道爲什麼你需要通過這個名字,當你可以很容易地通過'City.find(params [:building] [:city_id])創建''行動。'name' –

回答

1

我建議儘可能少做JS。因此:

首先在Rails視圖中添加隱藏字段(使用空值)。

現在,您需要將Javascript添加到您的頁面(您可能已經有一個文件在app/assets/javascripts/application.js,包含在所有頁面中;包括帶有Rails模板的JS是它自己的問題)。你需要兩個函數和jQuery將使生活輕鬆了許多:

  1. ,檢查選擇變量的值,並更新從選擇標籤值隱藏的標記值的函數。
  2. 一個在頁面加載時運行的函數,它將一個事件監聽器附加到select標籤;這將監聽「選擇」標籤上的「更改」事件,並在它看到它時調用我們的第一個函數。

這些看起來東西這樣的(注:此代碼會爲你幾乎可以肯定工作不需改動):

function setHiddenValue() { 
    // Get the value from the select tag 
    var selectValue = $('select#building_city_id').val(); 
    // Set the hidden tag's value to the select tag value we got in the last line 
    $('input[type=hidden]#city_name').val(selectValue); 
} 

我猜在選擇用於獲取元素,但是Rails會將ID放在你可以使用的ID上。

$(document).ready(function() { 
    $('select#building_city_id').on('change', setHiddenValue()); 
} 

顯然,這是粗糙和不會在被粘貼立即工作,你會希望確保選擇匹配的內容Rails的在你的HTML是放,你要確保腳本正在被包含在你的頁面中,並且正在設置事件監聽器,所以你需要檢查jQuery是否存在,並且你需要確保setHiddenValue函數獲得正確的值來放置隱藏的表單標記。但這就是我如何開始你想要做的事情;剩下的就是你的頁面特有的細節。

+0

謝謝你這樣詳細的答案:) – Zelenka

相關問題