2012-09-27 68 views
0

我需要一個解決方案來隱藏/顯示覆選框,具體取決於單選按鈕的選擇。我嘗試了不同的解決方案,但我可以讓他們工作。Rails 3 - 依賴於單選按鈕選擇的複選框

上下文: 我有一羣聯繫人可以關聯到一個企業。用戶可以選擇多個聯繫人,但必須選擇一個主要聯繫人。因此,我有一個單選按鈕組讓所有聯繫人選擇主要聯繫人,並且我有一個複選框組,讓所有聯繫人再次選擇「其他」聯繫人。

需要: 現在,我想要做的是,當用戶選擇單選按鈕組中的主要聯繫人,該聯繫人將被從「其他聯繫人」複選框組中刪除,因此用戶不能選擇相同聯繫兩次。我可以使用JQuery以及普通的JavaScript。

CONSTRAINT: 單選按鈕組以及複選框組是使用Rails標籤助手動態創建的。所以對於元素的ID和名稱來說很棘手。另外,業務和聯繫人之間還有一個很大的差距。

所以單選按鈕,我有:

<% @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 %> 

關於其他設計任何建議(使用單選按鈕和複選框... )實現我的目標非常受歡迎。

感謝 阿蘭

回答

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}" %> ... 

然後我們可以remvoe從另一個列表

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

+0

感謝@ D3mon,它的工作原理。但是,如果我刪除元素,則會出現另一個問題。如果我的用戶選中一個單選按鈕,相應的複選框就會消失,但是如果他選擇了另一個單選按鈕,則刪除的複選框不會再出現在列表中! – Alain

+0

檢查編輯。 –

+0

太棒了! +1,以便對我的評論做出快速響應。非常非常感謝你。 – Alain