我试图将onChange回调附加到div #dim
下的所有输入元素。它选择所有3个输入元素,但返回一个异常:
Uncaught TypeError: Object 0 has no method 'change'
可能是因为
x
可能不是jQuery对象。我将如何进行这项工作?function registercb() {
var sel = $("div.dim > input");
for (x in sel) {
x.change(function() {
dosomething();
});
}
}
最佳答案
您可以简单地执行以下操作:
function registercb() {
$("div.dim > input").change(dosomething);
}
需要注意的几件事:
在该迭代内(不要使用它,请参阅下一点)。
x
是DOM元素,而不是具有.change()
方法的jQuery对象,您需要将其包装在$(x)
这样的jQuery对象中,但这又不是正确的解决方案。不要使用
for(...in...)
循环来迭代对象(jQuery对象类似于数组),该循环类型用于枚举。大多数jQuery函数(几乎全部)都在一个以上的元素上运行,因此只需在集合上运行它即可影响所有元素,
.change()
是其中之一。在确实需要循环的情况下,请查看
.each()
,因为它会使您的生活更加轻松,请不要在此处使用它,它只是其外观的一个示例:例:
function registercb() {
$("div.dim > input").each(function() {
$(this).change(dosomething);
});
}