Javascript数组无法正常工作

时间:2012-07-13 13:49:59

标签: javascript jquery arrays variables

我对js / jquery很新。对于ID为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(检查)返回 [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');
});

2 个答案:

答案 0 :(得分: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'); 
});

答案 1 :(得分:0)

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

将jQuery对象放在变量中:

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

checks.each(function(){
  agree(this, "."+elemid+checks[i]);
});