Jquery表单验证 - 返回false不结束循环

时间:2013-03-25 18:03:52

标签: jquery

我想验证表单,以便填写所有文本输入字段。为此,我编写了下面的函数,但我的问题是它总是向我显示已验证的消息。如果我将某个字段保留为空,则会显示空的和​​已验证的警报。

如果您有帮助或建议更好的方法。

function validate() {
    $("#myform :text").each(function(){
        if($.trim(this.value).length==0){
            alert("Empty!");
            return false;
        }
    });
    return 1;
}
$(document).on('click','#addnew',function() {
    if(validate() != 1){
        return false;
    }
    alert('Verified.');
});

4 个答案:

答案 0 :(得分:4)

return false;只会退出$.each()循环。你需要在循环中设置一个变量,然后返回:

function validate() {
    var ret = true;
    $("#myform :text").each(function(){
        if($.trim(this.value).length==0){
            alert("Empty!");
            ret = false;
            return false;
        }
    });
    return ret;
}

您需要适当更改click处理程序(使用bool而不是-1);

答案 1 :(得分:1)

在您的代码中,空字段后面的任何已完成字段都会导致函数返回1.要解决此问题,请创建一个定义为true的变量,如果任何字段为空,则将其设置为false。

function validate() {
    var isValid = true;
    $('#myform :text').each(function () {
        if($.trim(this.value).length === 0){
            alert('Empty!');
            isValid = false;
        }
    });
    return isValid;
}
$(document).on('click', '#addnew', function () {
    var isValid = validate();
    if (isValid) {
        return false;
    }
    alert('Verified.');
});

答案 2 :(得分:1)

我更改了代码以返回一个名为fail的变量,而不是尝试从函数中提前返回。应该更好地工作:

 function validate() {
    var fail = false;
    $("#myform :text").each(function(){
        if($.trim(this.value).length==0){
            alert("Empty!");
            fail = true;
            return false;
        }
    });
    return !fail;
}
$(document).on('click','#addnew',function() {
    if(validate()){  
        return false;
    }
    alert('Verified.');
});

答案 3 :(得分:0)

首先,我发现使用console.log进行JavaScript调试而不是警报更容易(它们不会阻止脚本执行,使得时间更加明显)。

因此,看起来你的验证函数实际上从未返回-1,它返回false。因此,点击功能的比较永远不会成立,这意味着“已验证”。警报将始终显示。