2011-02-02 43 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