我对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');
});

最佳答案

我可能完全错过了一些东西,但是我很确定您只是试图将更改处理程序附加到每个复选框。在这种情况下,您可以给他们全部相同的班级。我也在猜测您的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');
});

关于javascript - JavaScript阵列无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11471834/

10-11 22:46
查看更多