2013-05-03 114 views
5

這比我所知道的違背事物精神的常見問題要抽象一些,但我希望我仍能得到很好的迴應。如何防止多次繪製模態?

這是問題所在。我們有一個用PHP編寫的相當複雜的Web應用程序。其目的是相對不重要的,但簡單地說:我們正在使用的Comet/AJAX/JSON/的JavaScript/PHP/MySQL的(NO jQuery的,但是,本地JavaScript只)來呈現實時顯示數據的控件。在整個應用程序中,我們使用原生JavaScript來渲染彈出式模式。它是相當複雜的邏輯,用於測試頁面中是否存在具有相同名稱的模式,並防止創建相同的新版本,當然,創建圖層時會創建一個圖層,以防止與下面的鏈接進行交互。

問題是我們至少有一種模式可以在頁面上呈現之前多次調用,這是因爲AJAX調用需要從數據庫中收集數據並將其組裝起來。如果用戶要在所述鏈接上「雙擊」,則將呈現兩個模式,一個在另一個之上。我已經能夠實際渲染8-10這些。與最頂層的模式交互似乎被破壞,因爲用戶實際上是在最底層的模式上實現可摺疊的標題。一旦你開始關閉對話框併到達底部,你可以看到你點擊的地方。

所以,我的問題是:什麼是防止這種行爲的最好辦法?

我認爲簡單地增加一個函數的onClick事件,將取出的onClick從鏈接屬性第一次點擊與未成年人超時後(比如500毫秒)。我也考慮嘗試實現位測試邏輯,這些邏輯可以計算點擊次數,實際上只有首次點擊後的事件,並在模式關閉時重置。

什麼我不知道是如果有人有任何想法或建議,或者甚至已經解決了類似的問題,對最佳實踐的一些見解,以完成在這種情況下我的目標。

非常感謝。

+3

如果你使用jQuery,你總是可以嘗試['。一()'](http://api.jquery.com/one /) – Bojangles 2013-05-03 13:04:49

+0

會我可以。儘管我很喜歡在這個項目中使用jQuery,但項目經理完全並且完全反對非本地JavaScript。不過謝謝你的建議。我應該把這些信息包括在內,以便更清楚。 – fskirschbaum 2013-05-03 13:47:51

+0

啊,慚愧。可能值得一提的是,你沒有使用jQuery,因爲很多讀者(包括我自己)常常假設它的存在 – Bojangles 2013-05-03 14:35:40

回答

0

在這種情況下,我發現最簡單的辦法是最好的,但我還是喜歡聽其他反饋if'n它在那裏。

在這種情況下,我發現,操作順序是問題。我正在等待AJAX​​響應來爲這個模式生成body html。我改變了順序,而是在模態體內使用<p>Loading...</p>立即創建模態。然後,當AJAX完成並且我有了新的正文文本時,我只用一小段代碼將它注入模態的內容區域,Bob是您的叔叔,我們有大獎。

4

您可以註銷單擊處理程序,一旦觸發:

var element = ..., 
myClickHandler = function(event) { 
    // ... 
    element.removeEventListener('click', myClickHandler, false); 
    // ... 
} 

element.addEventListener('click', myClickHandler, false); 
+0

我很喜歡這個解決方案。謝謝! – fskirschbaum 2013-05-03 18:32:44