2011-02-02 73 views
6

Rails 2.3.5,Ruby 1.86選擇onchange沒有被寫入

我一直無法弄清楚這一點。下面的選擇中的'onchange'沒有被寫入(沒有在HTML中寫入的onchange)。我沒有見過的語法的引用是除了在一些較老的例子平變化在括號包圍不同:

<%= f.select :directory_id, options_for_select(@directories, @directory_to_select), :onchange => 'folder_lookup()' %> 

結果:

<select id="contact_directory_id" name="contact[directory_id]"> 
<option value="2">test_1</option> 
<option value="4">test_2</option> 
<option value="33" selected="selected">test_3</option> 
</select> 


如果我只是改變「f.select」到「select_tag」,onchange被寫入正確(不是我想要這樣做):

<%= select_tag :directory_id, options_for_select(@directories, @directory_to_select), :onchange => 'folder_lookup()' %> 

結果:

<select id="contact_directory_id" name="directory_id" onchange="folder_lookup()"> 
<option value="2">test_1</option> 
<option value="4">test_2</option> 
<option value="33" selected="selected">test_2</option> 
</select> 


我缺少一個選擇和select_tag助手之間的平變化語法的差異?

謝謝!

回答

22

這是你想要什麼:

<%= f.select :directory_id, options_for_select(@directories, @directory_to_select), {}, :onchange => 'folder_lookup()' %> 

與選擇方法的簽名看起來像這樣select(object, method, choices, options = {}, html_options = {})。 onchange是一個html_option,因爲你沒有任何選項,所以你需要一個空的散列,這樣你的最後一個onchange被當作html_option。

+0

謝謝 - 非常感謝!我完全錯過了看到我需要一個佔位符。 – Reno 2011-02-02 15:58:32