我在表单中有一个多选框。使用DOM(例如http://www.digimantra.com/tutorials/add-append-remove-value-in-select-html-element-using-javascript/)从javascript添加/删除此选择框中的元素。 我想在提交表单时获取控制器内部选择框中的所有元素。
有没有简单的方法呢?
感谢。
答案 0 :(得分:2)
表单提交中不保留选择框中可能的选项列表,仅发送选定的选项。
在提交时在选择框中发送选项列表的唯一方法是添加/删除列出选项/值的隐藏标签。
如果你通过添加带有Javascript的选项子项来更新select DOM元素,那么你应该有更多的东西。只需添加或删除列表中的选项的javascript添加或删除表单中的隐藏字段。
IE:
假设由此部分创建的表单:
<% from_for @user do |f| %>
<%=f.collection_select :selected_values, Values.all, :id, :name %>
<% Values.all.each do |v| %>
<%= hidden_field_tag "user[select_options][#{v.name}]", v.id %>
<% end %>
<%= link_to_function "Add Twenty option",
'$("select").insert(bottom: "<option value=\"20\">twenty</option>");
$("form").insert(bottom: "<input type="hidden\" id=\"user_select_options_twenty\"
name=\"user[select_options][twenty]\" value=\"20\">"'
%>
<%= link_to_function "Remove Twenty option",
'$("select").select(\'[value="twenty"]\').remove();
$("#user_select_options_twenty").remove()'
%>
假设您在页面加载时填充初始select语句的隐藏值,则在提交时,params [:user] [:select_options]将包含所有可用选项的哈希值。此哈希中的键是显示的选项,哈希值是这些选项的值。
注意:发布的代码未经测试。这可能不对,但它足以让你走上正确的轨道。