仅当验证检查返回true时才通过ajax进行POST

时间:2011-10-04 17:59:54

标签: javascript jquery ajax validation post

我正在使用RSV验证器检查我的表单。想要得到以下工作:让我们说用户第一次打开页面。填写所有文本输入框后,当用户单击#submit_btn第一次时,表单提交功能触发RSV(验证器),验证器检查是否有任何错误。如果可以,通过ajax发布数据,否则RSV会在alert()的帮助下显示错误消息数组。本程序仅适用于第一次

BTW:RSV - 验证器。如果在验证过程中没有发生错误,myoncomplete()函数返回1 ..如果出现问题,它会发出警报。来自here

我无法让它发挥作用。请帮我修复逻辑/代码错误。 Thx提前

我的JS

var int=null;
var counter=0;
function myOnComplete() {

    return 1;

}

$(document).ready(function () {

 $("#add_form").RSV({

        onCompleteHandler: myOnComplete,

        rules: [

            "required,name,Page name required",

            "required,title,Page title required.",


            ]

    }); 

 $("#add_form").submit(function (e) {
        e.preventDefault();
        dataString = $("#add_form").serialize();
        $.ajax({
            type: "POST",
            url: "processor/dbadd.php",
            data: dataString,
            dataType: "json",
            success: function (result, status, xResponse) {
                //do something if ajax call is success

                int = setInterval(call, 3000);
                var message = result.msg;
                var err = result.err;
                if (message != null) {
                    $.notifyBar({
                        cls: "success",
                        html: message
                    });
                }
                if (err != null) {
                    $.notifyBar({
                        cls: "error",
                        html: err
                    });
                }
            },
            error: function (e) {
                //ajax call failed
                alert(e);
            }
        });
});
$("#submit_btn").click(function () {  

            if(counter===0){
            if(myOnComplete()===1) $('#add_form').submit();
            else return false;
            }
            else  $('#add_form').submit();
            counter++;
            }); 

            $('#autosave').click(function(){
                if($(this).is(':checked')){
                     int = setInterval(call, 3000);
                     $('#submit_btn').attr({'value':'Save&Exit'});
                }
            else{
                    $('#submit_btn').attr({'value':'Save'});
                    clearInterval(int);
                }
            });

});

function call() {
    $('#add_form').submit();
}

2 个答案:

答案 0 :(得分:1)

好的,根据我的理解,现在你只想验证第一组数据,如果验证正确信任用户,我用jsFiddle开发了一个简单的例子,我想你可以利用那个

http://jsfiddle.net/WqnYa/9/

基本上我所做的是我抓住提交按钮点击而不是表单提交功能,也许它也可以这样做。我指定了一个类“需要验证”,当第一次验证通过时,我只是删除该类。如果该类不存在,则由于$(this).hasClass('needval')

,将不会初始化验证

如果那不是你想要的,那么你的问题需要更清晰:(希望这会有所帮助!

答案 1 :(得分:1)

查看RSV代码,看起来你附加RSV的任何内容都有其提交反弹以使用.RSV.validate()验证数据

如下所示:

$(this).bind('submit', {currForm: this, options: options}, $(this).RSV.validate);
});

这意味着如果你使用.submit(),你也会调用.RSV.validate。

因此,一旦您验证了信息,请尝试将您的提交绑定到标准提交功能。

编辑:帮助解释

使用时

$("#add_form").RSV({...});

RSV javascript代码将.RSV.validate()绑定到add_form元素的submit事件。提交add_form表单时的含义.RSV.validate()在提交之前被调用。

尝试使用和不使用.RSV()调用

运行下面的脚本代码

此脚本将记录add_form元素上所有事件的所有处理程序。您注意到调用$ element.RSV({...})会将第二个事件处理程序附加到add_form元素的submit事件。我不确定最好的方法来访问这个事件处理程序到.unbind()它。祝你好运:)

jQuery.each($('#add_form').data('events'), function(i, event){
    jQuery.each(event, function(i, handler){
       console.log(handler);
    });
});