2013-01-19 31 views
6

我的索引页上有一个非常简单的用例。所有jQuery手机事件发射两次

 <script src="js/jquery-min.js"></script> 
     <script src="js/jquery-mobile.js"></script> 
     <script type="text/javascript" src="cordova-2.2.0.js"></script> 

     <script> 
       $("body").on("swipeleft", function(event) { 
       alert('hello'); 
       /*window.location.href = "html/first.html";*/    
      }); 
     </script> 

由于某种原因,此事件发射2次。现在我确定我没有在body标签上绑定另一个事件,因为这是第一页。我尝试过其他一些简单的事件,比如touchstart等等,他们都发射了两次。我究竟做错了什么 ?

更新: -

我已经修改标志着我以下列方式为正确答案和它的工作。此页面上的事件不会触发两次。

<head> 
     <script type="text/javascript" src="js/jquery-min.js"></script> 
      <script> 
       $(document).bind("mobileinit", function() { 
         $.mobile.autoInitializePage = false; 
         $.mobile.defaultPageTransition = 'none'; 
         $.mobile.touchOverflowEnabled = false; 
         $.mobile.defaultDialogTransition = 'none'; 
         $.mobile.loadingMessage = '' ;     
        }); 
      </script> 
      <script type="text/javascript" src="js/jquery-mobile.js"></script> 
      <script type="text/javascript" src="cordova-2.2.0.js"></script> 
</head> 
+0

@ Floradu88:你是对的遗憾了点。我尝试了一些解决方案,但还没有得到确切的答案。但我会标记我正在研究的那个。 –

+0

您应该只标记正确的答案,不要标记不正确的答案 –

+0

是的,但是我标记为正确的答案会对其进行一些更改。我会相应地更新答案。 –

回答

14

很少有避免这个问题的方法。就像CodeJack告诉你这是一个知道的问题,但它不是一个错误,主要是因为处理页面的独特方式。

  • 一个最简单的是再次结合之前解除绑定的事件,就像这样:

    $("body").off().on("swipeleft", function(event) { 
        alert('hello'); 
        /*window.location.href = "html/first.html";*/    
    }); 
    

    如果您有其他事件势必同一对象使用:

    $("body").off("swipeleft").on("swipeleft", function(event) { 
        alert('hello'); 
        /*window.location.href = "html/first.html";*/    
    }); 
    
  • 有一种替代方法可以使用事件绑定/解除绑定,活/死和开/关。您可以使用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元素没有点击事件,请添加他们的事件。在你的情况下,这将防止多个事件绑定。

其他的解决方案,可以发现here

+0

这似乎很好地工作,非常感谢...... !!! –

1

这是已知的问题...我发现它,以避免移动内部<head> JS代码tag..i唐诺是避免问题的reason..but ...

4

您应该尝试使用文档就绪事件将事件附加到正文。此外,您可能还想将一个事件仅附加到身体

$(document).ready(function(){ 
    $("body").off().on("swipeleft", function(event) { 
     alert('hello');   
    }); 
}); 

如果您有绑定到同一个对象使用其他事件这样的:

$(document).ready(function(){ 
    $("body").off("swipeleft").on("swipeleft", function(event) { 
     alert('hello');   
    }); 
});