2012-10-09 54 views
0

我似乎無法找到解決此問題的任何直接方法?我無法圍繞Google's Fast Buttons的方式包裹我的頭。所以如果有人有另一種選擇,那真是太好了。修復jQuery Mobile + PhoneGap中幽靈點擊的最簡單方法?

幽靈點擊我在說的是指觸摸一個按鈕或觸發多次的東西。例如,點擊將顯示alert("hello");的按鈕將顯示所述警報框2或有時甚至5次。

這是處理按鈕按下的代碼的一部分。我省略了一些部分,但基本上,這是處理「添加」按鈕上按下的機制。

$('div:jqmData(role="page")').live('pagebeforeshow',function(){ 
    var db = window.openDatabase("mydb", "1.0", "MyDB", 1000000); 

    var url = window.location.href; 
    var filename = url.substring(url.lastIndexOf('/')+1); 

    switch (filename) { 
     case "index.html": 
      $("#add").tap(function(e){ 
       if ($("#info").val() == "") { 
        navigator.notification.alert("The info cannot be blank!", function(){}, "Error", "Okay, got it!"); 
       } else { 
        db.transaction(addToDb, errorCB, addedToDb); 
       } 
      }); 
      break; 
     case "sample.html": 
      break; 
    } 
}); 
+0

你應該顯示來代碼,你綁定了什麼事件?你正在委派事件處理程序嗎? – Jasper

+0

添加了代碼。 – Propeller

回答

1

你有一個標準的事件綁定發生在一個委託事件綁定內部。這意味着每當外部事件發生時,內部綁定都會被綁定。

因此,基本上,每當pagebeforeshow觸發任何僞頁面時,您都會重新綁定您的tap事件處理程序。每次您導航到另一個頁面時,您都會創建另一個內部綁定,以便獲取多個警報。

一個很好的解決方法是爲pageinit頁面事件創建委託事件處理程序,並在該事件處理程序中執行內部綁定。 pageinit事件僅對每個僞頁面觸發一次,因此您不會不必要地添加更多事件處理程序。

例如:

$(document).on('pageinit', '.ui-page',function(){ 
    var db  = window.openDatabase("mydb", "1.0", "MyDB", 1000000), 
     url  = window.location.href, 
     filename = url.substring(url.lastIndexOf('/')+1); 

    switch (filename) { 
     case "index.html": 
      $("#add").tap(function(e){ 
       if ($("#info").val() == "") { 
        navigator.notification.alert("The info cannot be blank!", function(){}, "Error", "Okay, got it!"); 
       } else { 
        db.transaction(addToDb, errorCB, addedToDb); 
       } 
      }); 
      break; 
     case "sample.html": 
      break; 
    } 
}); 

你會發現我用.on()我委託的事件處理程序,而不是貶值.live()