9

I'm building a contact form and I need help with the jQuery validator.

function contactform() {
    $("form #submit").on("click", function() {
        $("form input").removeClass("error");
        validator();
        // 3rd action goes here
    });
});

validator() checks to see if any input is left empty, and if so it adds an error class to it:

function validator() {
    $("form input").each(function() {
        var value = $(this).val();
        if (value.length <= 0) {
            $(this).addClass("error");
            return false;
        }
    });
});

Now, for the 3rd action in contactform() I want to say that if validator() = true (i.e. there no inputs that are empty), then continue on to the next code.

I can't seem to return the value of validator(). Does anybody know the best way to do this?

4

3 に答える 3

8

filterメソッドを使用した別のソリューションを次に示します。

function validator() {
    return $("form input").filter(function() {
        return $.trim(this.value).length == 0;
    }).addClass("error").length == 0;
});

function contactform() {
    ...
    if (validator()) {
        // it's OK
    } else {
        // there are errors
    }
}

更新: @am_not_i_amの助けを借りて驚くほど更新されました。ありがとう!

于 2012-05-28T18:43:18.153 に答える
4

遭遇したように見える問題は、ネストされた関数とクロージャーがあり、値を直接返すことができないことです。

そのような何かがうまくいくはずです:

function validator() {
    var result=true;
    $("form input").each(function() {
        var value = $(this).val();
        if (value.length <= 0) {
            $(this).addClass("error");
            result = false;
        }
    });
    return result;
});
于 2012-05-28T18:41:46.023 に答える
4
function validator() {
    var result = true;
    $("form input").removeClass("error");
    $('form input').each(function() {
           if(!$.trim(this.value)) {
             $(this).addClass('.error');
             result = false;  
           }
     });
    return result;
}


function contactform() {
    $("form #submit").on("click", function() {
        if(validator()) { // pass the validation

        } else { // fail validation

        }
        // 3rd action goes here
    });
});
于 2012-05-28T18:40:53.040 に答える