0

我正在使用 bassistance 验证插件,并且有一个小脚本可以捕获第二个提交按钮(称为预览)并通过 ajax 将数据发送到 fancybox。我想在将表单发送到fancybox 之前对其进行验证。目前,如果我通过提交按钮发送表单,它们只会被验证。我尝试了各种方式(例如,我在 if 等之后直接调用验证)但无法使其工作。也许有一种方法可以让验证知道它也应该在按下预览按钮时做出反应?

我的代码:

        $(function() {
            $('#myform *').tooltip();
            $('#myform ').validate();
            });

        $(document).ready(function(){
          $(':submit').click(function(){
              for (var i in CKEDITOR.instances){
                CKEDITOR.instances[i].updateElement();
                }
            var value = $(this).attr("id");
            if (value == 'preview') {
                $.fancybox.showLoading();
                $.ajax({
                    type    : "POST",
                    cache   : false,
                    url     : "../mypath/",
                    data    : $('#myform').serializeArray(),
                    success : function(data) {
                      $.fancybox(data, {
                        'minWidth': '100%',
                        'minHeight': '100%',
                            });
                      }
                    });
                    return false;
            }
        });
    });
4

1 回答 1

3

如果我没记错的话,Bassistance Validator 插件依赖于这样一个事实,即如果您提交表单并且未满足要求,则该函数会在该提交时返回“false”,从而使您能够直观地看到所犯的错误。

在您的源代码中,您在代码的一开始就正确初始化了 Bassistance 验证器插件(我假设您直接在输入字段上为其创建了规则,例如 minlength="2" required )但是有一个问题:有提交按钮的 SUBMIT 事件没有挂钩,但仅适用于该按钮上的 CLICK 事件。

Bassistance 网站上有一个简单的示例,展示了如何为插件使用自定义提交事件:

http://jquery.bassistance.de/validate/demo/ajaxSubmit-intergration-demo.html

基本上,您需要做的是将代码的智能部分插入

jQuery("#yourform").validate({
    submitHandler: function(form) {
        jQuery(form).ajaxSubmit({
            /*
                Here you can do the following:
                1) Update the instances of CKEDITOR
                2) Check if the submit is in the preview mode
                3) If yes
                    - do your fancy stuff
                    - return false so that the real submit is not triggered
                   If not
                    - return true so that the real submit handler is evaluated by the browser and the POST is triggered
            */

        });
    }
});
于 2012-12-20T10:34:50.520 回答