【问题标题】:jQuery ajax form submit - multiple post/get requests caused when validation failsjQuery ajax 表单提交 - 验证失败时导致多个 post/get 请求
【发布时间】:2010-05-05 13:08:32
【问题描述】:

我有一个问题,如果表单提交(设置为通过 AJAX 提交)验证失败,下一次提交表单时,post 请求的数量会增加一倍——这绝对不是我想要发生的。我正在使用 jQuery ValidationEngine 插件提交表单并将验证消息绑定到我的字段。这是我下面的代码。我认为我的问题可能在于我通过 $('.form_container form').attr('action') 检索表单操作属性 - 我必须这样做,因为使用 $(this).attr正在获取第一个加载表单的操作属性 - 但是,当我将新表单加载到页面中时,它不会正确获取新表单的操作,直到我删除了 $(this) 选择器并使用类引用它。谁能看到我在这里可能做错了什么? (请注意,我有 2 个类似的表单处理程序已加载到 domready 上,这也可能是一个问题)

        $('input#eligibility').live("click", function(){
            $(".form_container form").validationEngine({
                ajaxSubmit: true,
                ajaxSubmitFile: $('.form_container form').attr('action'),
                success :  function() {
                    var url = $('input.next').attr('rel');
                    ajaxFormStage(url);
                },
                failure : function() {
                    //unique stuff for this form
                }
            });
        });
         //generic form handler - all form submissions not flagged with the #eligibility id
        $('input.next:not(#eligibility)').live("click", function(){
            $(".form_container form").validationEngine({
                ajaxSubmit: true,
                ajaxSubmitFile: $('.form_container form').attr('action'),
                success :  function() {
                    var url = $('input.next').attr('rel');
                    ajaxFormStage(url);
                },
                failure : function() {
                }
            });
        });

【问题讨论】:

    标签: javascript ajax jquery-plugins jquery


    【解决方案1】:

    问题是你在点击两次的时候绑定了两次验证引擎。我对验证引擎不是很熟悉,但我确定这是你的问题。

    validationEngine 绑定后,您需要确保不再绑定它。


    编辑

    或者这样做:

        $('#eligibility').live("click", function(){
            $.validationEngine.submitForm($(".form_container form"),{
                ajaxSubmit: true,
                ajaxSubmitFile: $('.form_container form').attr('action'),
                success :  function() {
                    var url = $('input.next').attr('rel');
                    ajaxFormStage(url);
                },
                failure : function() {
                }
            });
            return false;
       });
       $('input.next:not(#eligibility)').live("click", function(){
            $.validationEngine.submitForm($(".form_container form"),{
                ajaxSubmit: true,
                ajaxSubmitFile: $('.form_container form').attr('action'),
                success :  function() {
                    var url = $('input.next').attr('rel');
                    ajaxFormStage(url);
                },
                failure : function() {
                }
            });
            return false;
      });
    

    【讨论】:

    • 啊,好吧,我明白了(我想)。所以我应该在失败回调中取消绑定验证引擎,因为点击事件会在下次提交尝试时再次绑定它——这有意义吗?
    • 感谢大卫的建议,但我目前收到此错误 - “$.validationEngine.settings 未定义”。只是想弄清楚,因为您的建议似乎比我在失败回调中手动取消绑定验证引擎更清晰
    • 看起来validationEngine实际上已经坏了。
    • 终于整理好了!添加了 $('#eligibility').die('click');从点击中取消绑定表单。
    猜你喜欢
    • 2016-10-22
    • 2017-02-18
    • 2021-09-02
    • 2020-02-28
    • 2017-01-26
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2019-08-26
    相关资源
    最近更新 更多