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