2014-01-14 41 views
2

我有一個使用Phonegap和JqueryMobile開發的應用程序。各地在總的iOS,Android和iPhone 15.000倍在PhoneGap上觸發多次(甚至循環)的事件 - Jquerymobile app

這個應用程序已被下載。代碼在所有平臺上完全相同。

偶爾後端服務器過載,當我看到我看到一個用戶正在發送上百次相同的呼叫日誌。 (用戶是真實的人,我已經與他們談論這個問題,所以它不是機器人或類似的東西)

對我來說,似乎無論是單擊事件循環或服務器調用循環但無法檢測原因。

這已經發生在3個用戶了15.000(據我所知),並且用戶已經使用的應用程序多次發生問題之前。這個問題發生在Android和iOS上,所以在我看來,jquerymobile/javascript方面存在問題。

任何想法可能會導致此問題?

回答

2

我結束了更多的解決方案在第一次觸摸後禁用按鈕並解決問題。

看來主要問題是敲擊按鈕兩次,但由於某種原因,我無法檢測到之後,它進入了一個無限循環。

0

做你該做event.preventDefault()和event.stopPropagation()在onclick功能? (如果沒有,瀏覽器的行爲可能有很大的差異)

其他想法,它可能是有用的隱藏或的onclick功能開始禁用按鈕,以避免用戶執行多次點擊。

我敢肯定,你已經做了這一切,但以防萬一...

+0

謝謝。看起來onclick並不是由用戶生成的,而是進入一個循環,因爲我在服務器上每秒鐘接近3次調用。這似乎不是傳播問題。任何其他想法?謝謝 –

6

我想說首先注意你的js/DOM代的設計問題。

當您綁定的是已被綁定的事件,jQuery將再次與它沒有,如果該事件已被綁定檢查。如果您想將多個 事件函數附加到同一個事件,那很好。

無論如何,有幾種方法可以解決這個問題。一種是在綁定事件之前解除事件,例如$.off()

$("#myDiv").off("click").on("click", function(e) { 
    // ... 
}) 

另一個是檢查事件函數裏面,如果該事件已經被解僱,例如:

$("#myDiv").on("click",function(e) { 
    if(e.handled !== true) { 
     alert('Clicked'); 
     e.handled = true; 
    } 
}) 

你可以找到自己的優點和缺點here