【问题标题】:Check condition whether all checkboxes are 'unchecked'检查条件是否所有复选框都“未选中”
【发布时间】:2012-12-08 10:54:36
【问题描述】:

我有七个复选框,如下所示。我正在尝试做以下三件事:
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);
}
}
});

谁能告诉我如何做到这一点? 对不起,如果我的解释不清楚。

我将感谢您的任何努力,并提前感谢您的帮助!

【问题讨论】:

  • 所以你是说如果你先检查一个数字然后取消选中它,'any'应该被选中?
  • 是的,如果我检查了几个数字而他们取消选中所有数字。

标签: jquery html


【解决方案1】:

你可以这样做

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

​

【讨论】:

  • 如果我可以将它用于另一组不同名称的复选框
  • 你应该在你原来的帖子@codebeginner 中声明过
  • 对不起,我才意识到我没有提到它。
  • 你的其他复选框有什么共同点吗?
  • "class_one" 用于“任何”复选框,“class_two”用于“1-6”复选框。这对于另一组复选框很常见
【解决方案2】:
if ($('input[name=deal]:checked').length==0) {

http://jsfiddle.net/mblase75/8MWgj/

【讨论】:

  • 不应该是 [name='deal'] 吗?
  • @HristoYankov 在这种情况下单引号是可选的。
  • 小提琴没有回答 OP 的问题。只是取消选中所有这些,警报触发,但未选中任何框。
  • @JayBlanchard 好吧,我认为 OP 可以自己做这小部分。他只是要求检查情况。但如果你坚持:jsfiddle.net/mblase75/8MWgj/1
【解决方案3】:

这将满足 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);
    } 
});

基于 OP 希望能够在没有明确名称的复选框的情况下重复使用它,他也可以这样做 -

$('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);
    } 
});

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2018-03-27
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多