我试图将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);
   });
}

09-20 23:29