如何在jQuery中删除实时提交事件?

时间:2011-10-20 19:00:30

标签: javascript jquery

我的网站上有两个表单#footer_leads和#footer_leads2我有一个实时提交事件,但需要在表单汇总之前验证一些内容,所以我有这个代码

$('#footer_leads2, #footer_leads').live('submit', function(e){
    e.preventDefault();
    console.log('again');                           
    var form = $(this);  //save reference to form
    if(somevalidation){
        form.die();
        form.submit(); //submit form
    }

我认为jQuery die事件会像上面的例子那样做,但页面只是进入一个无限循环并崩溃我的浏览器....任何关于如何做到这一点的想法

5 个答案:

答案 0 :(得分:6)

来自jQuery die()页面:

  

注意:为了使.die()正常运行,使用了选择器   与它必须完全匹配最初与.live()。

一起使用的选择器

请尝试$('#footer_leads2, #footer_leads').die()

答案 1 :(得分:2)

您不需要删除处理程序并重新提交。只需等待preventDefault(),直到您知道表单是否通过验证:

$('#footer_leads2, #footer_leads').live('submit', function(e) {
  if (!somevalidation)
    e.preventDefault();

  // Else, the form will continue submitting unimpeded.
});

答案 2 :(得分:1)

您是否要在提交后停用表单?

如果是,试试这个: $('input [type = submit]',this).attr('disabled','disabled');

我希望得到它的帮助,

答案 3 :(得分:1)

来自文档(http://api.jquery.com/die/):

  

注意:为了使.die()正常运行,使用了选择器   与它必须完全匹配最初与.live()。

一起使用的选择器

您需要使用.unbind('submit')

答案 4 :(得分:1)

不要unbind/die

只需使用原生方法提交表单。

$('#footer_leads2, #footer_leads').live('submit', function() {

    if (true /* validation succeeded */ ) {
        this.submit(); //submit form, but don't use jQuery's method
    } else {
        return false;
    }
});

更新:

由于听起来您正在进行验证的AJAX调用,因此您可以在this.submit()回调中执行success:

$('#footer_leads2, #footer_leads').live('submit', function() {

    $.ajax({
        url: 'some/path',
        context: this,  // set the context of the callbacks to the element
        ...
        success: function( d ) {
            if( d.is_valid ) {
                this.submit();
            } else {
                // give some feedback to the user for validation failure
            }
        }
    });

    return false; // block the submit by default
});