[英]How to submit form only once after multiple clicking on submit?
我遇到的問題是,當我嘗試通過單擊提交按鈕提交表單時,在此期間發布請求需要一些時間,如果我再次單擊提交按鈕,它將再次發送所有參數,並且參數會保存兩次,三次……等等。
我不知道如何限制提交按鈕,這樣表單就不會被提交兩次。 我想當我點擊提交時,我必須禁用提交按鈕,這樣用戶就不能再次點擊它,這是正確的做法嗎?
禁用按鈕是一種解決方案,但可能會給只是按 Enter 鍵提交表單的鍵盤用戶帶來問題。 在這種情況下,按鈕不會被禁用。 萬無一失的方法是像這樣處理onsubmit
事件:
(function () {
var allowSubmit = true;
frm.onsubmit = function () {
if (allowSubmit)
allowSubmit = false;
else
return false;
}
})();
(好吧,無論如何你都可以在啟用 JS 的情況下獲得)。 您可以禁用該按鈕,作為向最終用戶確認表單也只能提交一次的視覺確認。
<input type="submit" onclick="this.disabled = true" value="Save"/>
在 chrome 中使用這個:
<input type="submit" onclick="this.form.submit();this.disabled = true;" value="Save"/>
我喜歡Zoidberg 回答的簡單和直接。
但是,如果您想使用代碼而不是標記來連接該處理程序(有些人更喜歡將標記和代碼完全分開),這里使用的是Prototype :
document.observe('dom:loaded', pageLoad);
function pageLoad() {
var btn;
btn = $('idOfButton'); // Or using other ways to get the button reference
btn.observe('click', disableOnClick);
}
function disableOnClick() {
this.disabled = true;
}
或者你可以使用匿名函數(我不喜歡它們):
document.observe('dom:loaded', function() {
var btn;
btn = $('idOfButton'); // Or using other ways to get the button reference
btn.observe('click', function() {
this.disabled = true;
});
});
使用jQuery做這件事看起來非常相似。
如果您正在使用帶有ujs的Rails,那么請查看http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag中的disable_with
。
我知道這是舊的,但與其禁用,不如隱藏按鈕,您無法單擊看不到的內容。
<input type="submit" onclick="this.style.visibility = 'hidden'" value="Save"/>
如果您在 PHP 中使用表單提交/發布,則使用此代碼
onclick="disableMe();" in type="submit"
它的提交按鈕代碼
<input name="bt2" type="submit" onclick="disableMe();" id="bt2" style="width:50px;height:30px; margin-left:30px;" value="Select" />
我發現此方法最有效的最佳方法是,如果表單上的所有信息都正確,則將屬性添加到提交按鈕。 Incase用戶需要回來並用正確的信息再次填寫表格。
document.querySelector('.btn').addEventListener('submit',function(){
if(input.value){
this.setAttribute("disabled", "true")
}
};
您可以將下一個腳本添加到您的“布局頁面”(在全局所有頁面上呈現)。
<script type="text/javascript">
$(document).ready(function () {
$(':submit').removeAttr('disabled'); //re-enable on document ready
});
$('form').submit(function () {
$(':submit').attr('disabled', 'disabled'); //disable on any form submit
});
</script>
然后,每次提交表單時,提交按鈕都會被禁用。 (加載頁面時重新啟用提交按鈕。)
如果您正在使用驗證框架(如 jQuery 驗證),則可能需要在驗證失敗時重新啟用提交按鈕。 (因為表單驗證失敗導致提交被取消)。
如果您使用 jQuery 驗證,您可以檢測表單失效(表單提交取消),添加以下內容:
$('form').bind('invalid-form.validate', function () {
$(':submit').removeAttr('disabled'); //re-enable on form invalidation
});
然后,如果表單驗證失敗,則再次啟用提交按鈕。
一種解決方案是不使用<input>
作為提交按鈕,而是使用樣式為按鈕的<div>
(或<span>
),具有onclick
屬性:
<form method="post" id="my-form">
<input type="text" name="input1">
<input type="text" name="input2">
<input type="text" name="input3">
...
<div class="button" id="submit-button" onclick="submitOnce()">
Submit
</div>
</form>
而submitOnce
函數將首先刪除onclick
屬性,然后提交表單:
function submitOnce() {
document.getElementById('submit-button').removeAttribute('onclick');
document.getElementById('my-form').submit();
}
您可以使用 this.once() 方法調用一次 function:
<form method="post" id="my-form">
<input type="text" name="input1">
<input type="text" name="input2">
<input type="text" name="input3">
...
<div class="button" id="submit-button" onclick.once="submitOnce()">
Submit
</div>
</form>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.