2012-04-26 84 views
1

我想阻止用户提交两次对话框。防止jQuery对话框提交两次

这里是我的代码提交:

$('form', dialog).submit(function() { 
    if (dialogSubmitted) { return false; } 
    dialogSubmitted = true; 
    ... 
    ... 
}); 

哪里dialogSubmitted是表示如果表单已经提交的变量。问题是它不起作用。当我打开对话框并按Enter两次(快速)表单提交两次。

有什么想法?

谢谢。


UPDATE

这里是另一个企图也失败了,当我按下回车键两次非常迅速:

$('form', dialog).one('submit', function (evt) { 

     evt.preventDefault(); 

     $(this).on('submit', function (evt) { 
      evt.preventDefault(); 
     }); 

     $.post($(this).attr('action'), $(this).serialize(), function (data, status) { 
      $('#my-modal').modal('hide'); 
      ... 
      ... 
     }).error(function (error, status, a, b) { 
      $('.modal-body p.body').html(error.responseText); 
      writeError('msgError', pStopIndex.validationFailed); 
     }); 

     // Unbind form submitting 
     $('form', dialog).unbind(); 
     return false; 
    }); 

正如你所看到的,我做阿贾克斯后(代替经典表单提交)。也许问题在那里?

这里是谷歌浏览器痕迹的捕捉:

enter image description here

我们可以看到有2个职位。只有当我快速按下确认键两次或快速点击提交按钮两次时才会发生。

有什么想法?谢谢。

+0

什么禁用提交按钮之前前往POST'$(“#按钮”)ATTR(“禁用”,“禁用”);'我做到这一点,它比存储变量becasue的更好你正在经历的原因。禁用按钮,你不能快速按两次。 – ppumkin 2012-04-26 11:25:59

+0

@ppumkin:好主意,但如果用户通过按回车键提交?即使提交按钮被禁用,用户可以通过按回车键提交?正确? – Bronzato 2012-04-26 11:33:13

+0

@bronzatio ... ummmmmm。不知道哈哈:)从来没有尝试过。 – ppumkin 2012-04-26 12:11:20

回答

4

只是使用one()方法

参见实施例拨弄:http://jsfiddle.net/MpBCL/

$('form', dialog).one('submit', function (evt) { 

    /* prevent default action */ 
    evt.preventDefault(); 

    ... 
    /* code to be executed once */ 
    ... 

    /** 
    * disable default action (this handler will be attached after first 
    * submit event and it will prevent any further submit action 
    */ 
    $(this).on('submit', function (evt) { 
     evt.preventDefault(); 
    }); 

}); 

进一步参考:http://api.jquery.com/one/

描述:附加的处理程序,为元素的事件。处理程序每​​个元素最多执行一次。

+0

从来不知道这个:)不错的一个 – ppumkin 2012-04-26 11:27:43

+0

是的不错,但我注意到,如果我很快按下输入键两次,我的表单仍然提交两次。可能? – Bronzato 2012-04-26 11:41:00

+0

@Bronzato我已经包括一个例子小提琴,如果这有帮助 – fcalderan 2012-04-26 12:09:59