2011-10-13 210 views
2

這個微小的JavaScript以及一些CSS應該通過在點擊提交後凍結屏幕來防止重複輸入數據庫。爲什麼這個JavaScript代碼不能按預期工作?

到目前爲止,在使用該應用程序提交條目的超過200人中,其中6人已經設法提交重複條目。

我們懷疑舊版瀏覽器可能會對雙重條目負責。

我們仍在調查。

這個假設是否正確?

如果是,是否有一種方法可以改善此代碼在所有瀏覽器上工作?

我想保留這段代碼,而不是因爲愉快的外觀和感覺而去另一個,但是對更好的東西開放。

<script type="text/JavaScript"> 
    function FreezeScreen(msg) { 
     scroll(0, 0); 
     var outerPane = document.getElementById('FreezePane'); 
     var innerPane = document.getElementById('InnerFreezePane'); 
     if (outerPane) outerPane.className = 'FreezePaneOn'; 
     if (innerPane) innerPane.innerHTML = msg; 
    } 
</script> 

--css

<style type="text/css"> 
    .FreezePaneOff 
    { 
     visibility: hidden; 
     display: none; 
     position: absolute; 
     top: -100px; 
     left: -100px; 
    } 

    .FreezePaneOn 
    { 
     position: absolute; 
     top: 0px; 
     left: 0px; 
     visibility: visible; 
     display: block; 
     width: 100%; 
     height: 100%; 
     background-color: #666; 
     z-index: 999; 
     filter:alpha(opacity=85); 
     -moz-opacity:0.85; 
     padding-top: 20%; 
    } 

    .InnerFreezePane 
    { 
     text-align: center; 
     width: 66%; 
     background-color: #171; 
     color: White; 
     font-size: large; 
     border: dashed 2px #111; 
     padding: 9px; 
    } 
</style> 

****** UPDATE ******

我在這裏發佈我的迴應,因爲那個東西不會讓我補充愚蠢的消息發表評論,每5秒只允許1條評論,並且自上次評論被添加以來已經過了10分鐘。

非常感謝@PPvG和@Random。我需要一個人的腳本(更可能是@ Random的,因爲我不明白@PPvG意思是什麼@ ..提交的東西...),但是我需要使用你中的一個人的js嗎?除了我目前使用的那個?此外,asp.net是否允許表單動作=「〜」...?

+3

爲什麼你不能在點擊後禁用提交按鈕? – rid

+0

假設可能是正確的,但在這種情況下,我會建議服務器端檢查冗餘,而不是僅依賴於客戶端。無論如何,爲了確保您的客戶端代碼正常工作,我們需要檢查CSS。謝謝。 – solendil

+0

'if語句'是否可以註冊'true'?這可能會發生嗎?也許你需要一個'if,else'語句呢? –

回答

0

我同意@Random。只需禁用提交按鈕,並在提交一次後阻止表單的默認操作。類似這樣的:

var submitted = false; 
var form = document.getElementById('form_id'); 
var submitButton = document.getElementById('submit_button_id'); 

form.onsubmit = function() { 
    if (submitted) { 
     FreezeScreen("Already submitted!"); 
     // Stop the form from being submitted a second time: 
     return false; 
    } 

    // ... do your submitting stuff ... 

    submitted = true; 
    submitButton.disabled = true; 
} 
+0

如果你想通過AJAX提交,評論('你提交的東西')就在那裏。如果您只是想等到表單以正常方式提交,則不需要添加任何內容。 :) – PPvG

+0

thaks很多。我更喜歡你的。另一個也很好。自從我使用.net以來,我只是擔心動作的問題,但我非常感謝所有的幫助。 – Kenny

2

這些都不會阻止頁面提交。爲什麼不攔截頁面的on_submit動作並在頁面已經提交的情況下取消呢?

<form action="~" onSubmit="return CheckSubmitted();"> 
    ....... 
</form> 

<script type="text/javascript"> 
var submitted = false; 

function CheckSubmitted() 
{ 
    if (submitted == true) { return false; } 
    else { submitted = true; return true; } 
} 
</script> 
+0

action屬性的「〜」值只是一個佔位符。它實際上應該是您想要提交的頁面的URI。 – Random

+0

我明白@Random。我可能沒有正確說出它。我的問題是更多的asp.net允許

關鍵的問題是單詞action =「...」。我知道經典的ASP允許它但不確定.net,這是我正在使用的。非常感謝你的時間和幫助。 – Kenny

+0

只是一個快速的LAST問題,我該如何調用這個js? – Kenny

相關問題