2009-12-21 56 views

回答

2

表单提交中未保留选择框中可能的选项列表,只发送所选选项。

在提交时发送选择框中的选项列表的唯一方法是添加/删除列出选项/值的隐藏标签。

如果您通过使用Javascript添加选项子元素来更新选择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()' 
%> 

假设你填充在页面加载初始选择语句隐藏值这在提交,则params [:用户] [:在select_options]将包含所有可用选项的散列。这个哈希中的键是显示的选项,哈希的值是这些选择选项的值。

注意:发布的代码是未经测试的。这可能是不对的,但它应该足以让你走上正轨。