2012-12-20 112 views
1

我有7个复选框,如下所示。我试图做3件事情如下:
1)当'任何'复选框被'检查'时,剩下的'1-6'应该是'未选中'。 2)当'1到6'复选框中的任何一个被选中时,'任何'复选框应该是'未选中'。 3)如果我'检查'数字,然后'取消'所有这些,然后'任何'复选框应该'检查'检查条件是否所有复选框都未选中

我能够做1)和2)使用jquery,但不是3)。

我无法检查所有复选框“1 - 6”是否'未选中'。

HTML:

<input name="deal_any" type="checkbox">any 

<input name="deal" type="checkbox">1 
<input name="deal" type="checkbox">2 
<input name="deal" type="checkbox">3 
<input name="deal" type="checkbox">4 
<input name="deal" type="checkbox">5 
<input name="deal" type="checkbox">6 

的jQuery:

$("input").click(function(){ 
name=$(this).attr("name"); 
match = name.match(/any/); 
if(match != null) 
{ 
if($(this).is(':checked')) 
{ 
    $('input[name="deal"]').attr('checked', false); 
} 
} 
else 
{ 
if($(this).is(':checked')) 
{ 
    $('input[name="deal_any"]').attr('checked', false); 
} 
} 
}); 

谁能告诉我这可怎么办呢? 对不起,如果我的解释不清楚。

我会很感谢您的帮助!

+2

http://www.whathaveyoutried.com –

+0

所以你说如果你先检查一个号码然后取消选中,那么'any'应该被检查? –

+0

是的,如果我检查几个数字,他们取消选中所有的数字。 – Newbie

回答

3

你可以像下面这样做

var da = $('input[name="deal_any"]'); // any checkbox 
var di = $('input[name=deal]'); // other 6 
// when any checkbox changes 
da.change(function() { 
    // if checked then uncheck all others 
    if(this.checked){ 
     di.prop('checked',false); 
    } 
}); 
// when other 6 checkboxes change 
di.change(function(){ 
    // if none are checked then check "deal_any" checkbox - else uncheck 
    da.prop('checked',$('input[name=deal]:checked').length === 0); 
}).change(); // trigger on page load 

http://jsfiddle.net/W8QSW/

你可以把它普及做这样

var da = $('input.class_one'); // checkbox with name that ends with any 
var di = $('input.class_two'); // other checkboxes that don't have any 
// when any checkbox changes 
da.change(function() { 
    // if checked then uncheck all others 
    if(this.checked){ 
     di.prop('checked',false); 
    } 
}); 
// when other 6 checkboxes change 
di.change(function(){ 
    // if none are checked then check "deal_any" checkbox - else uncheck 
    da.prop('checked',$('input.class_two:checked').length === 0); 
}).change(); // trigger on page load 

​ 
+0

是的,它工作正常,但我希望代码是可重用的。 – Newbie

+0

你是什么意思“我希望代码是可重用的”? –

+0

如果我可以将它用于另一组名称不同的复选框 – Newbie

2

这将满足由OP中列出的所有条件 -

$('input[name="deal"]').change(function() { 
    $('input[type="checkbox"]').not($(this)).prop('checked', false); 
    if($('input[name="deal"]:checked').length == 0){ 
     $('input[name="deal_any"]').prop('checked', true); 
    } 
}); 

基于业务方案的愿望,能够再利用这个没有明确的名称为复选框,他也能做到这一点 -

$('input[name="deal"]').change(function() { 
    $('input[type="checkbox"]').not($(this)).prop('checked', false); 
    if($('input[type="checkbox"]:checked').length == 0){ 
     $('input[type="checkbox"]').eq(0).prop('checked', true); 
    } 
});