2012-04-26 90 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