2 回答

TA貢獻2080條經驗 獲得超4個贊
您只需要在提交提交后disabled設置。您可以使用零延遲來實現:setTimeout
$('.myForm').submit(function () {
setTimeout(() => {
$(this).find('[type=submit]').prop('disabled', true)
}, 0)
})
然后,將發生以下情況:
表單提交事件被觸發,因為用戶單擊或按下了按鈕Enter
瀏覽器正在調用您的
submit
處理程序你正在“武裝”你的超時
瀏覽器正在向服務器提交表單(帶有提交按鈕的值)
之后您的超時立即觸發,禁用按鈕
請注意,我submit
在表單上使用了處理程序,而不是click
在按鈕上使用了處理程序,因為當焦點位于表單字段上時,也可以通過按下來提交Enter表單,而不僅僅是通過單擊按鈕。然而,由于表單提交的工作方式,禁用該按鈕也將阻止提交Enter。

TA貢獻1811條經驗 獲得超4個贊
我最近遇到了類似的情況,有時我會雙擊“反彈”。這是我處理它的兩種方法:
1) 只需禁用按鈕,將 AJAX 數據發送到 PHP 并在成功時恢復按鈕
$("#save_button").click(function (e) {
e.preventDefault();
$(this).attr("disabled", true);
var settings = $('form').serialize();
console.log("settings are ", settings);
$.post("data/ajax.php", settings, function (data) {
data = JSON.parse(data);
console.log("data back from save is ", data);
$("#save_button").removeAttr("disabled");
})
});
2)創建一個'nobounce'功能(它基本上做同樣的事情,但是在一個計時器上。它使用起來有點簡單,因為它只需要在你想要禁用的任何按鈕上設置類'nobounce',雖然它是在計時器上,發布完成后啟用按鈕并不準確。
$('.nobounce').click(function () {
$(this).attr("disabled", true);
setTimeout(function () {
$('.nobounce').removeAttr("disabled");
}, 3000);
});
這些都是 jquery 方法 - 將表單保留在頁面上。從您的描述看來,您可能正在通過 PHP 提交表單(請,如果這不是您需要的答案,請提供一些您正在使用的代碼,這樣可以更清楚?。?。如果您通過 PHP 提交,那么對原始問題的一些評論非常有效。
希望這會有所幫助 - 再次,如果沒有,請提供一些代碼,您可以獲得更直接的幫助。
添加回答
舉報