如果我的用戶在表單的提交按鈕上單擊多次,他實際上會發送多個GET/POST請求(具體取決於表單的prefs)。禁止在HTML表單上多次提交
我發現禁用使用JS的提交按鈕有點問題,因爲如果用戶試圖停止(ESC /停止按鈕),它不會重置按鈕(除非你捕獲並再次處理使用JS ),如果用戶從下一頁回來(返回鍵),按鈕仍然(至少在Firefox)禁用提交。
什麼是禁止多重表單提交的最佳實踐。
謝謝!
如果我的用戶在表單的提交按鈕上單擊多次,他實際上會發送多個GET/POST請求(具體取決於表單的prefs)。禁止在HTML表單上多次提交
我發現禁用使用JS的提交按鈕有點問題,因爲如果用戶試圖停止(ESC /停止按鈕),它不會重置按鈕(除非你捕獲並再次處理使用JS ),如果用戶從下一頁回來(返回鍵),按鈕仍然(至少在Firefox)禁用提交。
什麼是禁止多重表單提交的最佳實踐。
謝謝!
的Javascript對我來說工作正常。確保在用戶放棄提交時啓用按鈕是可用性的一部分。
如果你不想使用JavaScript來禁用你的按鈕,那麼可能在服務器端你可以在特定的時間內捕獲重複的消息?
這可能不會回答你的問題,但我認爲生成一些uniq來識別服務器端的請求可能是一個更好的主意。客戶端驗證始終存在問題。
我會與你同意這種說法。只需使用隱藏字段來保留隨表單一起提交的一次性值。值保持在服務器上,當請求到達時它會得到無效的,因此後續使用相同的密鑰請求都將被忽略。 很明顯,你可以使用JS魔法,但這是不可靠的。 – rytis 2010-01-27 09:12:15
綁定禁用的表單提交,然後其禁用頁面加載(當你刷新重置/回):
function disableSubmits(domNode, toDisable)
{
domNode = domNode || document.getElementsByTagName('body')[ 0 ];
toDisable = !!toDisable;
for(var i = 0; i < inputs.length; ++i)
{
if('submit' === inputs[i].getAttribute('type'))
{
inputs[i].disabled = toDisable;
}
}
}
var onloadhandler = function()
{
var theForm = document.getElementById('theForm');
theForm.onsubmit = function(){ disableSubmits(theForm, true); }
disableSubmits(theForm, false);
};
var old = window.onload;
window.onload = 'function' === typeof old
? function(){ old(); onloadhandler(); }
: onloadhandler;
感謝pavium :) 我喜歡計算器越來越多! – Eli 2010-01-27 08:53:31