-1

我发现了很多关于表单的 javascript 验证函数的讨论,但找不到任何人遇到这个特定问题。

在下面的代码中,即使数组 'fields[]' 中有 21 个值,for 循环也会在 2 次迭代后结束。它弹出的最后一个警报显示为“1 < 21”——就好像它认为 2 不小于 21。

我认为这可能是数据类型错误,但无法弄清楚。感谢任何可以看到它的人。

var fields = new Array;
var fields = [
    document.forms["survey"]["Q1Age"].value,
    document.forms["survey"]["Q2Gender"].value,
    document.forms["survey"]["Q3Education"].value,
    document.forms["survey"]["Q4Field"].value,
    document.forms["survey"]["Q6Other"].value,
    document.forms["survey"]["Q7Edited"].value,
    document.forms["survey"]["UserAccount"].value,
    document.forms["survey"]["Whole"].value,
    document.forms["survey"]["Sections"].value,
    document.forms["survey"]["Images"].value,
    document.forms["survey"]["Keywords"].value,
    document.forms["survey"]["writing"].value,
    document.forms["survey"]["trustworthy"].value,
    document.forms["survey"]["accuracy"].value,
    document.forms["survey"]["bias"].value,
    document.forms["survey"]["info"].value,
    document.forms["survey"]["Viz1"].value,
    document.forms["survey"]["Viz2"].value,
    document.forms["survey"]["VizDescription"].value,
    document.forms["survey"]["VizOver"].value,
    document.forms["survey"]["submit2"].value
];

var err = 0;

//Start Validation Loop
for(var i = 0; i < fields.length; i++) {
    alert(i + " < " + fields.length); //test how many iterations

    //Check Fields in Array to Make Sure they are not Empty
    if(fields[i].value == "" || fields[i].value == "Select One") {
        err++;
    }
}

if(err === 0) {
    //Submit Form
    //document.survey.submit();
    return true;
} else {
    //If there are errors, return false and alert the user
    alert("Please fill out all of the fields.");
    return false;
}
}
4

1 回答 1

1

由于您在value创建数组时获取输入,因此您的数组元素已经是字符串,因此在您的 if 语句中,您试图value从字符串中获取属性,这可能导致脚本结束,因为它正在尝试访问未定义的财产

你的 if 语句应该是这样的。

 if(fields[i] == "" || fields[i] == "Select One") {
        err++;
 }
于 2013-08-22T14:19:04.410 回答