除了我在你的問題的意見建議,你可以使用一個覆蓋股利。這是一個固定的位置div,定位在整個頁面上,其中z-index
爲999
(將其放在所有內容之上)。當其display
CSS屬性設置爲none
,它不會顯示/呈現在頁面上,但是當它是空的,它被繪製並涵蓋了預防與頁面元素的用戶交互。 Submit
按鈕的onclick
處理程序在提交表單之前取消隱藏此div。 div有30%的不透明度,所以你可以看到有些東西覆蓋了頁面,但仍然可以看到頁面中的其他元素。
我把一個PHP腳本,包含一個整數,每個迭代的負載是一個服務器端的文本文件生成一些垃圾數據,所以你可以在更新服務器端發生的看到。這證明覆蓋層可以防止重複提交。
<?php
// THIS JUST RECORDS SOME JUNK DATA AND INCREMENTS IT EACH LOAD
// IN A TEXT FILE TO SHOW THAT THE DATA IS NOT UPDATED MORE
// THAN ONCE PER CLICK
if (isset($_GET['i'])) {
file_put_contents("./record.txt", intval(file_get_contents("./record.txt"), 10) + 1);
} else {
file_put_contents("./record.txt", "1");
}
// THIS SIMULATES EXTENSIVE SERVER SIDE PROCESSING ... FIVE SECONDS WORTH
sleep(5);
?>
<!--THIS IS THE OVERLAY DIV THAT BLOCKS PAGE INTERACTION DURRING SERVR SIDE PROCESSING
THE OVERLAY IS FIXED (SO ITS POSITION IS RELATIVE TO THE BROWSER WINDOW RATHER THAN
THE DOCUMENT) AND HAS LEFT, RIGHT, TOP, AND BOTTOM POSITIONS THAT MAKE IT FIT
OVER THE ENTIRE BROWSER WINDOW.
THE BACKGROUND COLOR IS A LIGHT GRAY AND HAS AN OPACITY OF 30%
THESE CAN BE ADJUSTED, MAYBE YOU COULD PUT A "LOADING" GIF OR SOMETHING IN IT
AND MAKE IT FIT JUST OVER THE FORM RATHER THAN THE ENTIRE WINDOW...
I PUT THE CSS IN THE "STYLE" ATTRIBUTE RATHER THAN IN A STYLE NODE/CSS SCRIPT
YOU SHOULD PUT IT IN A CSS SCRIPT
-->
<div
id="formoverlay"
style="position:fixed;
left:0;
top:0;
right:0;
bottom:0;
background-color:#aaa;
filter:alpha(opacity=30);
opacity:.3;
z-index:999;
display:none;"
></div>
<!--THIS IS A FORM THAT SUBMITS TO A PHP PAGE CALLED ONCLICKSUBMIT.PHP (THIS PAGE)-->
<form method="GET" action="onclicksubmit.php">
<!--HIDDEN INPUT ELEMENT NAMED i. PHP WRITES THE VALUE FROM THE "DATA FILE" ABOVE
IN ITS "VALUE" ATTRIBUTE
-->
<input name="i" id="i" type="hidden" value="<?php echo file_get_contents("./record.txt");?>" />
<!--THE ONCLICK EVENT OF THIS SUBMIT UNHIDES THE "FORMOVERLAY" DIV THAT COVERS THE PAGE-->
<input type="Submit" onclick="document.getElementById('formoverlay').style.display='';"/>
</form>
您在事件處理程序中放入的代碼會在瀏覽器爲對象構建代碼之前觸發。因此,您在瀏覽器提交表單之前將該按鈕設置爲禁用。您可以通過使用常規按鈕並有條件地在事件處理程序中手動提交表單來解決此問題。 –
這是'onSubmit'而不是'onClick' – MMM
謝謝你的回覆!你們都正確地找出問題所在;然而,沒有任何提議的解決方案似乎不起作用。提交php需要時間讓用戶雙擊。我似乎無法停止兩次發生的提交。 – user3283304