TypeError: .each不是函数

所以我在我的页面上有三个引用三个下拉列表,并且每个都被更改,我想运行一个名为validateForm();的JavaScript函数validateForm();

我的代码如下:

 jQuery(document).ready(function() { var drpSupplier = document.getElementById('supplier'); var drpChargeRate = document.getElementById('formElementChargeRate'); var drpIDSEmail = document.getElementById('formElementEmailIDS'); var formLevel2DDs = new Array(); formLevel2DDs.push(drpSupplier); formLevel2DDs.push(drpChargeRate); formLevel2DDs.push(drpIDSEmail); formLevel2DDs.each(function() { $(this).change(function() { validateForm() }); }); }); 

但是这段代码给了我错误:

TypeError:formLevel2DDs.each不是函数

我非常感谢任何帮助。 我正在使用jQuery版本1.8.3(它是一个遗留系统)。

谢谢。

数组上没有each函数。

正如安东在评论中指出的那样,你根本不需要你所做的一切; 见下面的折叠。

但如果你想要each ,你有三个选择:

  1. 将数组包装在jQuery实例中并使用jQuery: $(formLevel2DDs).each(function(index, entry) { ... });

  2. 使用jQuery的$.each$.each(formLevel2DDs, function(index, entry) { ... });

    请注意,这与上面的function不同。

  3. 使用forEach ( MDN | Spec ): formLevel2DDs.forEach(function(entry, index, array) { ... });

    请注意,对于ECMAScript5, forEach是新的。 所有现代浏览器都有它,但你需要一个垫片/ polyfill为旧的(如IE8)。 另请注意,回调参数的顺序与上述任一选项不同。


但对安东来说,你可以更简单地做到这一点:

在这种情况下,没有理由直接使用getElementById ,它不是紧密循环或任何东西,所以:

 jQuery(document).ready(function() { $("#supplier, #formElementChargeRate, #formElementEmailIDS").change(validateForm); }); 

请注意,我还从validateForm周围删除了包装函数。 如果validateForm有返回值,您可能需要将其添加回来,并且您不希望jQuery使用该返回值(具体来说:如果返回false ,jQuery将停止传播并阻止change事件的默认操作) 。

如果您真的想使用这些变量直接访问DOM元素:

 jQuery(document).ready(function() { var drpSupplier, drpChargeRate, drpIDSEmail; var formLevel2DDs = [ drpSupplier = document.getElementById('supplier'), drpChargeRate = document.getElementById('formElementChargeRate'), drpIDSEmail = document.getElementById('formElementEmailIDS') ]; $(formLevel2DDs).change(validateForm); }); 

如果你想使用.each()你必须用这样的jQuery包装数组

 $(formLevel2DDs).each(function() { 

在这种情况下没有必要使用循环,只需在用jQuery包装的数组上使用.change()

 $(formLevel2DDs).change(function(){ validateForm() }); 

本机迭代器函数是forEach ,而不是each

jQuery .each函数只接受一个参数,即回调。 回调函数传递两个参数:列表中的索引和值。 调用回调,使列表值也是this值。

使用forEach ,参数以相反的顺序传递:值为第一个,后跟索引。 本机函数还将整个数组作为第三个参数传递。 除非在回调函数之后将第二个参数传递给.forEach 否则在调用回调时,本机函数不会绑定this函数。 如果存在这样的参数,则将其用作回调中的值。

本机迭代器会跳过尚未设置的数组元素。 jQuery .each()不会跳过这些元素,而是总是从索引0迭代到length - 1

尝试

 $(formLevel2DDs).each(function() { $(this).change(function() { validateForm() }); }); 

增加了一行

 jQuery(document).ready(function() { var drpSupplier = document.getElementById('supplier'); var drpChargeRate = document.getElementById('formElementChargeRate'); var drpIDSEmail = document.getElementById('formElementEmailIDS'); var formLevel2DDs = new Array(); formLevel2DDs.push(drpSupplier); formLevel2DDs.push(drpChargeRate); formLevel2DDs.push(drpIDSEmail); formLevel2DDs = jQuery(formLevel2DDs);//this line formLevel2DDs.each(function() { $(this).change(function() { validateForm() }); }); }); 

使用for … in循环

 for(key in formLevel2DDs) { ... }