Javascript IF块被跳过

时间:2013-07-21 08:13:44

标签: javascript validation

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

        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;
        }

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

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

另外,如果我选择第一个IF块:

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

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

我猜我的语法错误,但是我花了2个小时看,却找不到它。

P.S。

这是我正在使用的两个验证函数:

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 个答案:

答案 0 :(得分:2)

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

  1. 将if中的所有验证保留在if if if blocks中,并且每次都使用return false。 或
  2. 每当条件失败时将变量设置为false,然后返回该值。正如j00lz所说。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

return false; 

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

而是设置一个变量:

result="false";

并在函数add的末尾添加

return result;

答案 3 :(得分: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;
    }

我只是好奇如果你把整个事情做成一个大的陈述而不是把它分成几部分会发生什么,考虑到它不会改变验证过程。

<强> P.S。

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