2

我对 js/jquery 很陌生。对于 ID 为 check$(其中 $ 是序列号)的每个复选框,我想切换使用相同 check$(但作为一个类)的周围跨度的类“同意”。我不想硬编码匹配复选框的列表,因为这可能会有所不同。

这是我的代码。此功能按预期工作:

agree = function (checkbox, span) {
    $(checkbox).change(function(){
       $(span).toggleClass('agree');
   });      
};

这是我试图传递给上面的函数,它不起作用:

$(function() {
    var elemid = 'check',
    checks     = Array($('[id^='+elemid+']').length);
    console.log(checks);
  for (i=0; i < checks; i++) {
    agree('#'+elemid+checks[i], "."+elemid+checks[i]);
    }
});

console.log(checks) 返回[undefined × 4]。元素的数量是正确的,但我不知道为什么它是未定义的,或者这是否重要。

以下代码按预期工作,但正如我所说,我宁愿不必指定每个匹配的元素:

$(function() {
    var checks = ["check1", "check2", "check3", "check4"];
    for (i=0; i < checks.length; i++) {
        agree('#'+checks[i], "."+checks[i]);
        }
});

谢谢。

编辑:感谢Jack,我忽略了最简单的方法。我为所有复选框和跨度添加了相同的类,并解决了这个问题:

$('input.check').change(function(){
    $(this).closest('span.check').toggleClass('agree');
});
4

2 回答 2

1

我可能完全遗漏了一些东西,但我很确定你只是想为每个复选框附加一个更改处理程序。在这种情况下,您可以为他们提供所有相同的课程。我也在猜测跨度的 html 结构。

以供参考:

http://api.jquery.com/closest/

http://docs.jquery.com/Tutorials:How_jQuery_Works

$('.yourcheckboxclass').change(function(){ //grab all elements with this class and attach this change handler
   $(this).closest('span').toggleClass('agree'); 
});
于 2012-07-13T13:59:01.790 回答
0

数组中充满未定义值的原因是您只是获取 jQuery 对象中的项目数,并创建一个具有该大小的数组。jQuery 对象被丢弃。

将 jQuery 对象放入变量中:

var elemid = 'check', checks = $('[id^='+elemid+']');

checks.each(function(){
  agree(this, "."+elemid+checks[i]);
});
于 2012-07-13T14:10:19.000 回答