2012-01-03 77 views
15

我有一個複選框選擇所有問題。我有多個複選框可以由主控制器觸發。jQuery複選框:選擇全部/無,除了一個

如果主人是檢查,那麼你可以選擇任何複選框(這是工作)。現在我的問題是,當我檢查「沒有」,他們全都不見了,即使主人

我需要的不是取消選中主人。我可以根據需要選擇多少複選框。

有沒有一個解決方案做到這一點,而不是每個都放一個ID或自動取消選中所有複選框而不是主控制器?

這裏是我的代碼:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function() { 
    $('#checkAll').click(function() { 
    if(!$('#master').is(':checked')) { return; 
    } $('input[type="checkbox"]').attr('checked', true); 
    }); 

    $('#checkNone').click(function() { 
    $('input[type="checkbox"]').attr('checked', false); }); 

    $('#master').click(function() { if($('#master').is(':checked')) { 
     return; } $('input[type="checkbox"]').attr('checked', false); 
    }); 
    $('input[type="checkbox"]').click(function() { 
    if(!$('#master').is(':checked')) { $(this).attr('checked', false); 
    } 
    }); 
    }); 

    </script> 
    </head> 

    <input type="checkbox" value="master" id="master">master 
    <span id="checkAll">All</span> 
    <span id="checkNone">None</span> 

    <input type="checkbox" value="1" id="c1">1 
    <input type="checkbox" value="2" id="c2">2 
    <input type="checkbox" value="3" id="c3">3 
    <input type="checkbox" value="4" id="c4">4 
    <input type="checkbox" value="5" id="c5">5 
+0

全部取消然後重新檢查主 – 2012-01-03 00:54:24

回答

12

基於您的代碼,我想補充各地的複選框的包裝要選擇所有/沒有,然後給包裝標識和輸入選擇全部或沒有。

$('#list input[type="checkbox"]').attr('checked', false);

或jQuery的1.6+

$('#list input[type="checkbox"]').prop('checked', false);

這樣,你就可以控制所有的複選框,而不會影響 「主」 之一。

下面的代碼:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function() { 
$('#checkAll').click(function() { 
    if(!$('#master').is(':checked')) { 
     return; 
    } 
    $('#list input[type="checkbox"]').attr('checked', true); 
}); 

$('#checkNone').click(function() { 
    $('#list input[type="checkbox"]').attr('checked', false); 
}); 

$('#master').click(function() { 
    if($('#master').is(':checked')) { 
     return; 
    } 
    $('#list input[type="checkbox"]').attr('checked', false); 
}); 
$('#list input[type="checkbox"]').click(function() { 
    if(!$('#master').is(':checked')) { 
     $(this).attr('checked', false); 
    } 
}); 
}); 

</script> 
</head> 

<input type="checkbox" value="master" id="master">master 
<span id="checkAll">All</span> 
<span id="checkNone">None</span> 

<div id="list"> 
<input type="checkbox" value="1">1 
<input type="checkbox" value="2">2 
<input type="checkbox" value="3">3 
<input type="checkbox" value="4">4 
<input type="checkbox" value="5">5 
</div> 
+0

所以如果我有多個列表和按鈕,我可以創建任意多個列表按鈕我可以單獨創建每個列表? – 2012-01-03 01:03:32

+0

是的,你可以基於你檢查哪一個(主)來動態調用 – 2012-01-03 01:04:59

+0

感謝你的代碼,它工作的方式我需要它,我可以輕鬆地更新它以符合我的需求 – 2012-01-03 03:06:49

6

你只需要一個非常小的修改,以排除你的主人。

你可以做到這一點的.not(「#主」)像這樣:

$('#checkNone').click(function() { 
    $('input[type="checkbox"]').not("#master").attr('checked', false); }); 
+1

所以如果我有多個列表和多個主人,我必須把這樣:not('id1')。not('id2 ')。不(' ID3 ')。不(' ID4' )? – 2012-01-03 01:02:16

+1

沒有。如果所有這些主人都有一個以「主人」結尾的ID,則可以一次排除他們,如下所示:not(「input [id $ ='master']」) – Tys 2012-01-03 01:04:58

+0

或.not(「input [id * ='master']「),以防這些id以'master ..'開頭。查看jQuery通配符選擇以獲得關於這個東西的更多細節。 – Tys 2012-01-03 01:07:23

相關問題