选择onchange not be written

时间:2011-02-02 15:38:11

标签: ruby-on-rails

Rails 2.3.5,Ruby 1.86

我无法弄清楚这一点。下面的选择中的'onchange'没有被写入(没有在HTML中写的onchange)。我没有看到对语法的引用不同,除了在一些较旧的例子中,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和select_tag帮助器之间缺少onchange的语法差异?

谢谢!

1 个答案:

答案 0 :(得分:23)

这就是你想要的:

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

使用select,方法签名看起来像select(object, method, choices, options = {}, html_options = {})。 onchange是一个html_option,因为你没有任何选项,你需要一个空哈希,以便你的最后一个onchange被视为一个html_option。