2014-07-04 344 views
0

在我看來,我有這樣的形式與選擇功能:選擇&onChange | Ruby on Rails的

<form id="form_id"> 
<%= form.select('id','name', @document.informations.find(:all).collect {|u| [u.name] }, 
     options={},{:onChange => 'submit()'}) -%> 
</form> 

我怎麼能在我看來其餘使用選定的名字嗎?

我看到這個在其他主題:

$('#id_name').val(); 

但它沒有工作對我來說,它說:

`$(' is not allowed as a global variable name 

回答

2

你得到那個特定的錯誤,因爲$('#id_name').val()是JavaScript的,不是Ruby,但你已經把它放在erb標籤中。

當您在瀏覽器中訪問頁面/documents/3時,Rails將在您的控制器中運行代碼,並將一些HTML發送回瀏覽器。該HTML可以加載CSS和JavaScript,但是在Ruby程序完成後運行 - 根據瀏覽器的不同,可能根本無法運行。您如何在視圖中使用所選項目的名稱取決於您使用的是什麼。

如果你將它存儲在數據庫的某個地方,那麼你應該開始在Ruby中使用它。例如,如果您的@document具有selected_informations屬性,則可以在頁面的其餘部分使用該屬性,並將其傳遞到form.select以在頁面中預先選擇它。 The Rails Guides documentation has more info on this

如果您沒有將它存儲在數據庫中,那麼只要它發生變化,您就可以使用JavaScript獲取您的盒子的值。以下是一些示例代碼,只要<select>框被更改,就會將所選項的名稱打印到JavaScript控制檯。我已將它包含在<script>標記中,以便您可以直接將其放到您的視圖中以進行測試,但是如果您將其用於項目,則應將其放入專用的JavaScript文件中。需要注意的

<script> 
$('select').on('change', function(ev) { 
    var selected_item = $(ev.currentTarget).val(); 
    console.log("Your select value is " + selected_item); 
}); 
</script> 

的最後一件事是,現有的form.select標籤設置調用的方法submit()每當它的價值得到改變。 submit只是一個名字,所以功能可能做任何事......但我猜想它是提交表單,每當一個項目被選中。這會向Rails服務器發送請求並刷新頁面,因此請注意 - 如果您使用change上的事件偵聽器來更新當前頁面,則不會在新的刷新頁面上看到這些更改(並且應該使用而不是服務器端解決方案)。

+0

謝謝你的解釋。但是示例代碼不適用於我。它根本不會改變任何東西。 – Ananas

+0

示例代碼不會更改您的頁面;它會把東西打印到JavaScript控制檯,所以你可以看到一個獲得價值的例子。這裏是[Chrome](https://developer.chrome.com/devtools/docs/console)和[Firefox](https://developer.mozilla.org/en/docs/Tools/Web_Console)的說明。 –

+0

太棒了我懂了!但是在我的視圖中沒有任何簡單的方法直接打印選定的值? – Ananas