1

以下脚本应根据用户在下拉框中所做的选择(var 问题)仅验证某些输入字段。

我遇到的问题是当 if 语句针对问题 == 4(如下)运行并且用户填写了相应的 cityid 字段时,下一个 if 语句(问题 == 5)的警报(警报#3)是触发。如果用户从下拉列表中选择了问题 == 5 并且没有填写模型字段,我只想触发警报#3。

当 if 语句针对问题 == 5 运行时,分别会发生同样的问题。

function ValidateSOR()
{

    var user = document.SOR.User;
    var problem= document.SOR.Problem;
    var cityid = document.SOR.CityID;
    var errors1 = document.SOR.ErrorCodes1;
    var model = document.SOR.Model;
    var errors2 = document.SOR.ErrorCodes2;
    var software = document.SOR.SoftwareType;

    if (user.value == "")
    {
        window.alert("Please enter your name.");
        user.focus();
        return false;
    }

    if (problem.selectedIndex < 1)
    {
        alert("Alert#1");
        problem.focus();
        return false;
    }

    if (problem.selectedIndex == 4) 
    {
        cityid.focus();
    }
        else if (cityid.value == "")
    {
        alert("Alert#2");
        cityid.focus();
        return false;
    }

    if (problem.selectedIndex == 5) 
    {
        model.focus();
    }
        else if (model.value == "")
    {
        alert("Alert#3");
        model.focus();
        return false;
    }

    if (problem.selectedIndex == 6) 
    {
        software.focus();
    }
        else if (software.value == "")
    {
        alert("Alert#4");
        software.focus();
        return false;
    }

    return true;
}
4

2 回答 2

3

当您发现问题是 #4 时,您并没有从函数中返回。因此,因为它4,所以它不是 5,因此该分支的“else”部分被采用。

编辑——好的,让我们看看代码:

if (problem.selectedIndex == 4) {
    cityid.focus();
}
else if (cityid.value == "") {
    alert("Alert#2");
    cityid.focus();
    return false;
}

if (problem.selectedIndex == 5) {
    model.focus();
}
else if (model.value == "") {
    alert("Alert#3");
    model.focus();
    return false;
}

如果索引是 4,会发生什么?此代码运行:

  cityid.focus();

然后呢?代码继续执行下if一条语句:

if (problem.selectedIndex == 5) {

现在,如果我们刚刚注意到索引是 4,那么它等于 5 的可能性有多大?零!因此,该比较保证为false,因此我们转到该else部分。显然,您的“model.value”是空字符串,因此该if语句成功。你得到警报。

我认为您的问题可以通过使代码的逻辑更符合您的验证过程的逻辑来解决:

if (problem.selectedIndex == 4 || cityid.value == "") {
  cityid.focus();
  return false;
}

这样,如果索引为 4城市 ID 值为空,那么您将把城市 ID 视为错误并退出函数。在那之后发生什么并不重要,因为此时return离开了函数。

于 2013-07-17T17:45:32.940 回答
1

您应该像这样重组每个 IF:

if (problem.selectedIndex == 4 || cityid.value == "") 
{
    cityid.focus();
    return false;
}

if (problem.selectedIndex == 5 || model.value == "") 
//and so on

所以它以任何一种方式返回并且不会命中下一条if语句

于 2013-07-17T18:03:14.127 回答