1

我得到了一个表单,其中包含从同一类别模型填充的两个选择框

<%= collection_select(:c, :id1, @categories, :id, :name) %>

<%= collection_select(:c, :id2, @categories, :id, :name) %>


现在有什么方法可以确保在任何情况下从任何一个选择框中只选择一个类别。

例如,如果从第一个选择框中选择“书籍” ,第二个选择框不显示“书籍”值,反之亦然,或者
如果从第二个选择框中选择“音乐” ,第一个选择框不显示“音乐”在其值中,反之亦然。

即,在任何情况下,类别的选择都是完全独特的。

我相信这需要javascript的帮助,但这可以单独在控制器中完成还是需要两者的组合?

4

1 回答 1

1

如果你愿意,你可以在没有控制器的情况下做到这一点。在更改功能上制作 jquery,该功能将在第二次选择中隐藏当前选项。记住要防止在选择中只有一个隐藏选项

例子:

  $("#c_id1").change(function(){
    $("#c_id2 option:hidden").show();
    if($(this).val().length ){
      $("#c_id2 option[value=" + $(this).val() + "]").hide();
    }
  });
  $("#c_id2").change(function(){
    $("#c_id1 option:hidden").show();
    if($(this).val().length ){
      $("#c_id1 option[value=" + $(this).val() + "]").hide();
    }
  });  

像这样的东西会起作用。很好将重构这个。您应该将提示添加到 collection_select 以使其正常工作,因为在开始时具有相同的内容而没有此更改。

于 2013-11-07T12:20:09.810 回答