【问题标题】:Rails 3 - Checkbox dependant of radio button selectionRails 3 - 取决于单选按钮选择的复选框
【发布时间】:2012-09-27 16:08:25
【问题描述】:

我需要一个解决方案来隐藏/显示取决于单选按钮选择的复选框。我尝试了在这里和那里找到的不同解决方案,但我可以让它们发挥作用。

上下文: 我有一个可以与业务相关联的联系人池。用户可以选择多个联系人,但必须选择一个主要联系人。所以我有一个单选按钮组,让所有联系人选择主要联系人,我有一个复选框组,所有联系人再次选择“其他”联系人。

需要: 现在,我喜欢做的是,当用户在单选按钮组中选择主要联系人时,该联系人将从“其他联系人”复选框组中删除,因此用户不能两次选择同一个联系人。我可以使用 JQuery 以及纯 JavaScript。

约束: 单选按钮组和复选框组是使用 Rails Tag 助手动态创建的。所以元素的 id 和名称有点棘手。此外,在业务和联系人之间有一个 has_many :trough。

所以对于单选按钮,我有:

<% @contacts.each do |contact| %>
<li><%= radio_button_tag 'primary_contact', contact.id, @primary_contact == contact, :class => 'radio'%>&nbsp;&nbsp;<%= contact.name %>,&nbsp;<%= contact.contact_type.name %></li>
<% end %>

对于复选框组,我有:

<%= hidden_field_tag 'business[contact_ids][]', "" %>
<% @contacts.each do |contact| %>
<li><%= check_box_tag 'business[contact_ids][]', contact.id, @business.contacts.include?(contact), :class => 'radio' %>&nbsp;&nbsp;<%= contact.name %>,&nbsp;<%= contact.contact_type.name %></li>
<% end %>

非常欢迎任何关于其他设计(使用单选按钮和复选框...)以实现我的目标的建议。

谢谢 阿兰

【问题讨论】:

    标签: javascript jquery html ruby-on-rails-3 user-experience


    【解决方案1】:
    <li><%= radio_button_tag ... :id => "#{contact.id}", :onclick => 'removeFromOtherList(this.id);' %><%= "  #{contact.name}, #{contact.contact_type.name}" %></li>
    

    这样你就有了 HTML 标签 ID 的联系人 ID。 Onclick 它将删除\禁用其他联系人

    对其他联系人执行相同操作

    ...<%= check_box_tag ... :class => 'radio', :id => "otherContact#{contact.id}" %> ...
    

    然后我们可以从另一个列表中删除正确的联系人

    function removeFromOtherList(contactId) {
       $("#otherContact"+contactId).parent().remove(); //to remove the LI
    }
    

    Demo

    编辑:

    一种方法是使用显示/隐藏并跟踪最后选择的电台

    var lastSelectedRadioId = null;
    function removeFromOtherList(contactId) {
      $("#otherContact"+contactId).parent().hide();
      if(lastSelectedRadioId ){
         $("#otherContact"+lastSelectedRadioId ).parent().show();       
      }
      lastSelectedRadioId = contactId;
    }
    

    Demo

    【讨论】:

    • 感谢@D3mon,它有效。但是,如果我删除该元素,我会遇到另一个问题。如果我的用户选中一个单选按钮,相应的复选框就会消失,但如果他随后选择另一个单选按钮,则被删除的复选框不会重新出现在列表中!
    • 太棒了! +1 让您快速回复我的评论。非常感谢。
    猜你喜欢
    • 2019-08-16
    • 2023-03-06
    • 2021-12-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2021-01-20
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多