2013-01-15 47 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