2012-07-06 54 views
2

我在堆棧溢出中發現了這個問題的變體,但沒有任何一個符合我的具體情況。希望有人有一些見解。等到所有腳本完成後再啓用按鈕

現在我正在開發一個Web應用程序,其中有一個按鈕(技術上是錨標籤),用於在按下時生成項目列表。問題是,如果用戶連續兩次按下此按鈕,列表將會產生兩次 - 按鈕是爲了避免重複而在清除列表之前清除列表,但有關腳本交互的方式會導致此問題錯誤。該按鈕通過對服務器進行ajax調用來生成列表。

現在,我已經嘗試修復這個bug,通過將按鈕按下時將布爾值翻轉爲1,並使該按鈕無效,直到它再次爲0。這似乎不工作,無論我在代碼中的值再次設置爲0:我試着把它放在ajaxGet函數的末尾,以及頁面加載後,但這兩個解決方案都不起作用。

理想情況下,我希望在頁面完成加載和渲染後立即啓用按鈕。最終,需要的是阻止用戶連續兩次按下按鈕的方式。我已經考慮過使用計時器,但我寧願不必訴諸於此。

任何想法?讓我知道你是否想要代碼片段。

===========================================

編輯:謝謝大家的答案!我用Fibrewire的答案來解決這個問題,它效果很好。在按鈕調用方法的開始處,我輸入以下代碼:

if (actionsDisabled == 1) { 
    return; 
}//if 
else { 
    actionsDisabled = 1; 
    setTimeout("actionsDisabled=0;", 1000); 
}//else 

其中actionsDisabled是全局布爾值。它可能不是一樣的密封(特別是,如果列表花費了超過一秒的時間加載,你會遇到問題),但它的優雅性和功能性,還有減少服務器請求的額外好處(如果流量曾經成爲一個問題,你可以限制每5秒或10秒或其他任何一次呼叫)。再次感謝!

+0

我認爲我們將需要看到一些示例代碼來表示問題。 – 2012-07-06 13:37:01

+0

聽起來像你應該使用一個標誌,通過你的ajax' complete'事件清除,並通過你的錨點'click'事件詢問。 – jbabey 2012-07-06 13:37:25

+0

我可能是在簡化它,但爲什麼不能通過一次綁定它,然後重新綁定到代碼塊的末尾? – Snuffleupagus 2012-07-06 13:37:40

回答

1

您可以在第一次點擊後禁用按鈕

Disabling the button after once click

,如果您需要用戶能夠在將來再次單擊該按鈕,你可以使用setTimeout()方法來重新啓用它經過短暫的停頓

http://www.w3schools.com/jsref/met_win_settimeout.asp

+1

嘗試Mozilla文檔,它們比w3cschools更好:https://developer.mozilla.org/en/DOM/window.setTimeout。如果您不確定,請查看:http://w3fools.com/ – Jasper 2012-07-06 16:00:08