2013-01-15 73 views
2

我有一個非常簡單的用例。jquery手機向左滑動兩次

在頁面init加載一個html。

$(document).on('pageinit',function(){ 
       window.localStorage.setItem("page",'intro_1');        
       $('#navigation_main').load('html/intro_1.html'); 

      }); 

在滑動只是改變dom。

var flag = 0; 
       $("body").bind("swipeleft",function(event) { 
       flag +=1;        
       page = window.localStorage.getItem("page"); 
       alert(flag);    
       switch(page){ 
        case 'intro_1':       
         window.localStorage.setItem("page",'intro_2'); 
         $('#navigation_main').load('html/intro_2.html');       
         break; 

        case 'intro_2': 
         window.localStorage.setItem("page",'challenges'); 
         $('#navigation_main').load('html/challenges.html');      
         break; 

        case 'challenges': 
         window.localStorage.setItem("page",'risk_areas'); 
         $('#navigation_main').load('html/risk_areas.html');      
         break; 

        default: 
         window.localStorage.setItem("page",'intro_1');        
         $('#navigation_main').load('html/intro_1.html'); 
         break; 
       } 

      }); 

現在這個向左滑動觸發兩次,導致後續頁面被加載。我怎樣才能阻止呢?

回答

2

我假設你有事件綁定多次,它可以通過幾種方式解決。

  1. 使用$(體).unbind();在綁定事件之前,請使用。取消綁定將刪除所有已綁定的事件。不幸的是,這不是一個好的預防措施,因爲您經常綁定/解除綁定,從而導致大量處理開銷。

  2. 還有一種方法可以使用事件綁定/解除綁定,活/死和開/關。在再次綁定之前,不要使用jQuery事件過濾器進行解除綁定,而是使用jQuery事件過濾器來識別事件是否已被綁定。不要忘記從下面發佈的鏈接下載它(它不是jQM的標準部分)。

    http://www.codenothing.com/archives/2009/event-filter/

    這是我的使用示例:

    $('#carousel div:Event(!click)').each(function(){ 
        //If click is not bind to #carousel div do something 
    }); 
    

    我使用的每一個,因爲我的旋轉木馬div有許多內在的塊,但原理是一樣的。如果#carousel內部div元素沒有點擊事件,請添加他們的事件。在你的情況下,這將防止多個事件綁定。

3

您可以嘗試$("body").one而不是$("body").bind,以便它只被調用一次。

+0

其仍然發射兩次 –

+1

必須綁定兩次嘗試$(「body」)。die(「swipeleft」,<把你的函數放在這裏>);以殺死第一個綁定項目,然後添加它。 –

+0

這個答案是舊的,但你的意思是$(「body」)。on'。這是「開始」,而不是「一個」。 – BrettFromLA