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的语法差异?
谢谢!
答案 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。