1

我正在使用此代码来验证表单:

        if (isEmpty(email)) {
            alert("1");
            return false;
        }
        else if (!isEmail(email)) {
            alert("2");
            return false;
        }

        if (isEmpty(name)) {
            alert("3");
            return false;
        }

        if (isEmpty(age)) {
            alert("4");
            return false;
        }
        else if (!isAge(age)) {
            alert("5");
            return false;
        }

        if (isEmpty(city)) {
            alert("6");
            return false;

        }

        if (isEmpty(comments)) {
            alert("7");
            return false;
        }

当点击“提交”按钮时,如果前两个条件有效(检查电子邮件变量是否为空或不是电子邮件地址格式的条件) - 这意味着如果我将电子邮件输入留空或不是电子邮件地址格式我收到警报(1 或 2)。

问题是其余的验证都被跳过了,如果我将另一个输入留空或没有格式都没有关系。

另外,如果我采用第一个 IF 块:

 if (isEmpty(email)) {
            alert("1");
            return false;
        }
        else if (!isEmail(email)) {
            alert("2");
            return false;
        }

并将其移至验证块的末尾,一切正常。

我猜我在某处有错误的语法,但我花了 2 个小时寻找却找不到。

附言

这是我正在使用的两个验证功能:

function isEmpty(field) {
        if ((field == null || field == "")) {
            return true;
        }
        return false;
    }


function isEmail(field) {
        var atpos = field.indexOf("@");
        var dotpos = field.lastIndexOf(".");
        if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
            return false;
        }
    }
4

4 回答 4

2

return 语句退出函数以运行所有验证

  1. 将所有验证保留在 if else if 块中,并继续每次都使用 return false。或者
  2. 每当条件失败时将变量设置为 false,然后返回该值。正如j00lz所说。
于 2013-07-21T08:20:29.583 回答
2

x.length在 isEmail 函数中使用,但x未定义。

于 2013-07-21T08:51:04.460 回答
1

return false; 

结束函数并停止正在执行的其余代码。

而是设置一个变量:

result="false";

并在函数末尾添加

return result;
于 2013-07-21T08:17:47.763 回答
1

如果你把它改成这样会发生什么:

    if (isEmpty(email)) {
        alert("1");
        return false;
    }
    else if (!isEmail(email)) {
        alert("2");
        return false;
    }
    else if (isEmpty(name)) {
        alert("3");
        return false;
    }
    else if (isEmpty(age)) {
        alert("4");
        return false;
    }
    else if (!isAge(age)) {
        alert("5");
        return false;
    }
    else if (isEmpty(city)) {
        alert("6");
        return false;
    }
    else if (isEmpty(comments)) {
        alert("7");
        return false;
    }

我只是好奇如果你把整个事情变成一个大的 if 语句而不是将它分解成多个部分会发生什么,考虑到它不会改变验证过程。

附言

我不确定您是否意识到,但是按照您设置它的方式,一旦第一个 if 语句返回 false,在该 if 语句中返回 false 将结束您正在使用的整个方法,这意味着它不会运行它的任何其他部分。因此,如果您要为每个空输入等显示警报,则不会以这种方式发生。

于 2013-07-21T08:22:40.003 回答