Javascript 分组相似的jQuery函数

Javascript 分组相似的jQuery函数,javascript,jquery,Javascript,Jquery,有没有办法将以下功能组合成一个 $('#box_1 input:checkbox').click(function(){ var $inputs = $('#box_1 input:checkbox') if($(this).is(':checked')){ $inputs.not(this).prop('disabled',true); }else{ $inputs.prop('disabled',false); } }); $('#box

有没有办法将以下功能组合成一个

$('#box_1 input:checkbox').click(function(){
var $inputs = $('#box_1 input:checkbox')
    if($(this).is(':checked')){
       $inputs.not(this).prop('disabled',true); 
    }else{
       $inputs.prop('disabled',false);
    }
});
$('#box_2 input:checkbox').click(function(){
var $inputs = $('#box_2 input:checkbox')
    if($(this).is(':checked')){
       $inputs.not(this).prop('disabled',true); 
    }else{
       $inputs.prop('disabled',false);
    }
});
还有更多的盒子id。如果有一个比编写2公里代码更简单的解决方案,那就太好了


提前非常感谢您帮助为您的
box
ID-say“box”提供一个公共类


在所有的
#box_X
元素上放置一个公共类,并将其用于确定目标

$('.common-class').on('click', 'input:checkbox', function(){

    var $inputs = $(this).closest('.common-class').find('input:checkbox');

        if (this.checked) {
           $inputs.not(this).prop('disabled',true); 
        } else {
           $inputs.prop('disabled',false);
        }
});

首先在所有外盒上循环

$('[id^=box_]').each(function(){    
   var $inputs=$(this).find(':checkbox').change(function(){
        $inputs.not(this).prop('disabled', this.checked);
   });
});

ID作为属性选择器有点难看,更喜欢使用公共类,如果没有其他选择,您可以将其放入
for循环中,并动态生成选择器

for (var i=0; i<n; i++){
    $('#box_' + i + ' input:checkbox').click(function(){
    var $inputs = $('#box_' + i + ' input:checkbox')
        if($(this).is(':checked')){
           $inputs.not(this).prop('disabled',true); 
        }else{
           $inputs.prop('disabled',false);
        }
    });
}

用于(var i=0;i如果您显示HTML,包括一些包含div和项之间的关系,您会得到更好的帮助。然后,我们可能会找到一组选择器/代码,可以适用于所有人,但我们在看不到结构的情况下盲目行事。老实说,在看不到HTML的情况下,不值得猜测如何编写此代码。这个looks非常喜欢的功能。为什么不使用而不是这样的黑客?@rvihne,因为你不能取消选择单选按钮。我需要选择和取消选择它们。这不能处理更改组中其他复选框状态,就像使用此行
$inputs.not(This).prop('disabled',true)所做的那样
。这是问题的有趣部分-如何用一段代码为多组复选框解决这个问题。@jfriend00-已更新到无HTMLNow的最佳状态,您正在猜测HTML结构的外观。可能有效,也可能无效。这就是为什么我对OP的评论说我们必须查看HTML才能写出最好的结果回答。基本上只需要将
var$inputs=$('#box_2 input:checkbox')
转换为使用
最近('.box')
很好。简短!但是我在
var$inputs.not(this).prop('disabled',this.checked);
那一行有一个输入错误:第二个“var”太多了。现在它工作了。非常感谢!关于你的评论:但是id选择器不会更快吗?@Someone33 ooops错过了它更快了?可能没有像我那样使用属性选择器,类可能更快更容易阅读
for (var i=0; i<n; i++){
    $('#box_' + i + ' input:checkbox').click(function(){
    var $inputs = $('#box_' + i + ' input:checkbox')
        if($(this).is(':checked')){
           $inputs.not(this).prop('disabled',true); 
        }else{
           $inputs.prop('disabled',false);
        }
    });
}