コードを数時間デバッグしようとしましたが、何も得られませんでした。問題は、イベント リスナーで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/