我在页面上有三个对三个下拉列表的引用,并且每个都被更改,我想运行一个名为validateForm();
的JavaScript函数
我的代码如下:
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版本(它是一个遗留系统)。
答案 0 :(得分:15)
数组上没有each
函数。
正如Anton在评论中指出的那样,你根本不需要each
来做你正在做的事情;见下面的折叠。
但如果你想要each
,你有三个选择:
将数组包装在jQuery实例中并使用jQuery的each
:$(formLevel2DDs).each(function(index, entry) { ... });
使用jQuery的$.each
:$.each(formLevel2DDs, function(index, entry) { ... });
请注意,这与上述功能不同。
使用forEach
(MDN | Spec):formLevel2DDs.forEach(function(entry, index, array) { ... });
请注意,forEach
是ECMAScript5的新版本。所有现代浏览器都有它,但你需要一个垫片/ 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);
});
答案 1 :(得分:4)
如果你想使用.each()
,你必须使用像这样的jQuery包装数组
$(formLevel2DDs).each(function() {
在这种情况下没有必要使用循环,只需在用jQuery包装的数组上使用.change()
$(formLevel2DDs).change(function(){
validateForm()
});
答案 2 :(得分:2)
原生迭代器函数是forEach
,而不是each
。
jQuery .each
函数只接受一个参数,即回调。回调函数传递两个参数:列表中的索引和值。调用回调,使列表值也是this
值。
使用forEach
,参数以相反的顺序传递:值为第一个,后跟索引。本机函数还将整个数组作为第三个参数传递。在调用回调时,本机函数不会绑定this
,除非在回调函数之后将第二个参数传递给.forEach
。如果存在这样的参数,则将其用作回调中this
的值。
本机迭代器会跳过尚未设置的数组元素。 jQuery .each()
不会跳过这些元素,而是始终从索引0迭代到length - 1
。
答案 3 :(得分:0)
试
$(formLevel2DDs).each(function() {
$(this).change(function() {
validateForm()
});
});
答案 4 :(得分:0)
添加了一行
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()
});
});
});
答案 5 :(得分:-3)
使用for ... in循环
for(key in formLevel2DDs) { ... }