0

这是我的 jquery 函数的一部分,它验证我在我的网站上拥有的表单:

        /*
    validates errors on all the fieldsets
    records if the Form has errors in $('#formElem').data()
    */
    function validateSteps(){
        var FormErrors = false;
        for(var i = 1; i < fieldsetCount; ++i){
            var error = validateStep(i);
            if(error == -1)
                FormErrors = true;
        }
        $('#formElem').data('errors',FormErrors);   
    }



    /*
    validates one fieldset
    and returns -1 if errors found, or 1 if not
    */
    function validateStep(step){
        if(step == fieldsetCount) return;

        var error = 1;
        var hasError = false;
        $('#formElem').children(':nth-child('+ parseInt(step) +')').find(':input:not(button)').each(function(){
            var $this       = $(this);
            var valueLength = jQuery.trim($this.val()).length;

            if(valueLength == ''){
                hasError = true;
                $this.css('background-color','#FFEDEF');
            }
            else
                $this.css('background-color','#A8FC9C');    /* Campo preenchido */
        });
        var $link = $('#navigation_form li:nth-child(' + parseInt(step) + ') a');
        $link.parent().find('.error,.checked').remove();

        var valclass = 'checked';
        if(hasError){
            error = -1;
            valclass = 'error';
        }
        $('<span class="'+valclass+'"></span>').insertAfter($link);

        return error;
    }

    /*
    if there are errors don't allow the user to submit
    */

    $('#enviar_candidatura').bind('click',function(){
        var preenchimentoForm=true;
        if($('#formElem').data('errors')){
            preenchimentoForm=false;

            dadosFormularios(preenchimentoForm);
            //return false;
        }
        else{
            dadosFormularios(preenchimentoForm);
        }
    });
});

但是,我也使用 LiveValidation (http://livevalidation.com/) 来验证客户端的字段。显然,如果 jquery 验证的部分是 Ok,那么 LiveValidation 部分是否存在错误并不重要,因为表单已提交。所以,我想要的是在这个 jquery 代码中添加一个 if 子句或类似的东西来验证是否有 LV_invalid_fields。如果“是”,则阻止表单提交,就像使用 jquery 验证部分完成的那样,但我不知道该怎么做,也不知道上面代码中放置此验证的正确位置。我会很感激一些帮助。谢谢!

4

3 回答 3

0
//... live validation codes here

$("#myform").submit( function (event) ) {
    event.preventDefault();
    if ($(".LV_invalid").length > 0) {
        //do not submit   
    }
    else {
        //do form submission here
    }
}
于 2012-10-01T09:22:35.237 回答
0

首先,您必须将表单上的绑定更改为表单click上的操作绑定。submit并且您的函数必须返回false提交操作以停止提交操作。

因此,像这样更改您的代码:

$('#formElem').submit( function (event) ) {
    var preenchimentoForm = true;
    if ($('#formElem').data('errors')){
        preenchimentoForm = false;
    }
    return preenchimentoForm;
}   

您可以在此处阅读有关不显眼的 javascript 的一些说明。

于 2012-10-01T10:05:55.270 回答
0

LiveValidation 库中有一个选项未在文档http://livevalidation.com/documentation中解释

为了防止 LiveValidation 的提交,同时仍保留其验证事件,您可以使用“afterValidation”选项。

例子:

var prevent = function (e) {
       e.preventDefault(); 
};

var yourValidation = new LiveValidation( 
    "inputID", { 
    //Your other options
    afterValidation: prevent
    } 
);
yourValidation.add( Validate.Presence, { your options } );
于 2015-03-16T15:33:24.600 回答