我尝试调试我的代码几个小时,但我什么也没得到。问题是,为什么每次我尝试在事件侦听器中使用 document.forms[0][i] (i 作为迭代器)但“this”满足代码时它报告错误是绝对没有意义的。
//broken
var addListeners = function() {
var i;
var formFields = document.forms[0];
var formSubmit = formFields["submit"];
for (i = 0; i < formFields.length; i++) {
if (formFields[i] != formSubmit) {
formFields[i].onblur = (function () {
checkNonEmpty(formFields[i]);
});
}
}
};
//works
var addListeners = function() {
var i;
var formFields = document.forms[0];
var formSubmit = formFields["submit"];
for (i = 0; i < formFields.length; i++) {
if (formFields[i] != formSubmit) {
formFields[i].onblur = (function () {
checkNonEmpty(this);
});
}
}
};
“this”不是指 document.forms[0][i] 吗?... formFields 对 document.forms[0] 的引用。然而,完全相同的代码(在 formFields[i] 所在的“this”处)工作得很好。
这是演示:http: //jsfiddle.net/PbHwy/