2011-06-20 143 views
2

我有一個非常簡單的問題 - 我在想 - 但我無法自己解決它。當複選框2被選中時取消選中複選框1

我有兩個複選框: 一個與價值是,與值號

其他的我需要某種形式的腳本來幫我取消一個當其他檢查。所以,如果我檢查複選框沒有。 1 - 複選框沒有。 2會自動取消選中 - 反之亦然。其中一個複選框 - 只有一個 - 必須經常檢查。不,我不能在這種情況下使用單選按鈕。

將是巨大的,如果它可以做我的jQuery - 但任何幫助會做:)提前

感謝

羅伯特

+14

爲什麼你不能使用單選按鈕?這完全是他們設計的。 – lonesomeday

+1

「並且不 - 我在這種情況下不能使用單選按鈕。」 - 做詳細說明。 –

+4

如果你不能使用單選按鈕,那麼我猜你的分析存在一些問題,因爲你想要的只是單選按鈕的行爲。你應該退後一步,想想爲什麼地球上不能使用單選按鈕。不要重新發明輪子。 –

回答

1
$('#checkbox_1').change(function() { 

     if ($(this).is(':checked')) { 
      $('#checkbox_2').prop('checked', false); 
     } 
     else { 
      $('#checkbox_1').prop('checked', false); 
      $('#checkbox_2').prop('checked', true); 
     } 
    }); 

    $('#checkbox_2').change(function() { 

     if ($(this).is(':checked')) { 
      $('#checkbox_1').prop('checked', false); 
     } 
     else { 
      $('#checkbox_2').prop('checked', false); 
      $('#checkbox_1').prop('checked', true); 
     } 
    }); 

編輯:這應該現在的工作:-)

+0

嗨Thorsten。非常感謝。 #checkbox_1和#checkbox_2,它們與我的複選框有什麼關係? ID?名稱? 我有以下兩種: 那麼,我會放入代碼而不是#checkbox_1和#checkbox_2。是的,我知道我是一個完全白癡:) – Robert

+0

它應該足以將「checkbox_1」替換爲「contact_yes」,將「checkbox_2」替換爲全部代碼中的「contact_no」。 – Thorsten

2
$("#checkbox1").bind('click', function(){ $("#checkbox2").removeAttr('checked'); }); 
$("#checkbox2").bind('click', function(){ $("#checkbox1").removeAttr('checked'); }); 
3

我能想到的最簡單的方法是:

$('input:checkbox').change(
    function(){ 
     var group = this.name; 
     $(this).siblings('input:checkbox[name="'+ group + '"][checked]').removeProp('checked'); 
    }); 

JS Fiddle demo

但是有一些注意事項,上面的使用removeProp(),它僅限於jQuery 1.6(和以上,大概)。在1.6之前,應該可以用removeAttr('checked')代替。

請,不過,考慮使用<input type="radio" />元素,這是正是他們設計如何處理和使用。


編輯以下羅伯特·評論(評論中,下):

我按計劃進行這方面的工作,但是...我的形式我有另一組複選框,和他們得到限制也是如此,儘管它們的名稱完全不同。但我需要用戶能夠選擇多個這些複選框。看起來好像該腳本會影響所有複選框組。我實際上認爲通過輸入name =「'+ group +'」,可以將這個功能限制在名稱以「group」開頭的複選框中。但似乎並非如此。

來分配change事件處理程序的選擇是$('input:checkbox'),其選擇/適用於所有複選框在頁面上。

將其應用到只有那些複選框在特定的組,你可以使用:

$('input:checkbox[name="checkboxGroupName"]').change(
    function(){ 
     $(this).siblings().removeProp('checked'); 
    }); 

參考文獻:

+0

嗨大衛。非常感謝。我按計劃完成了這項工作,但是......在我的表格中,我有另一組複選框,他們也得到了限制,儘管他們的名字完全不同。但我需要用戶能夠選擇多個這些複選框。看起來好像該腳本會影響所有複選框組。我實際上認爲通過輸入name =「'+ group +'」,可以將這個功能限制在名稱以「group」開頭的複選框中。但似乎並非如此。 – Robert

0
function ChkBoxClicked() { 
    $("#chkBoxList_0").bind('click', function() { $("#chkBoxList_1").removeAttr('checked'); }); 
    $("#chkBoxList_1").bind('click', function() { $("#chkBoxList_0").removeAttr('checked'); }); 

    if (($('#chkBoxList_0').is(':checked')) || ($('#chkBoxList_1').is(':checked'))) { 
     if ($('#chkBoxList_0').is(':checked')) { alert('chkBoxList_0'); return false; } 
     if ($('#chkBoxList_1').is(':checked')) { alert('chkBoxList_1'); return false; } 
    } else { 
     alert('non of the chkBoxList'); return false; 
    } 
} 

這是我做的

0
$(document).ready(function() { 
    $(".checkbox1").click(function(event) { 
    $(this).parents('tr').children('td').children('.todos').prop('checked', false); 
    }); 
    $(".checkbox2").click(function(event) { 
     $(this).parents('tr').children('td').children('.checkbox1').prop('checked', false); 
    }); 

這基本上指出,當checkbox1被選中,並且用戶嘗試檢查checkbox2,checkbox1,將取消選中。

相關問題