循环的Javascript,表现得好像2=21

Javascript for loop behaving as though 2=21

本文关键字:Javascript 循环      更新时间:2023-09-26

我发现了很多关于表单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;
}
}

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

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

 if(fields[i] == "" || fields[i] == "Select One") {
        err++;
 }