2014-10-06 72 views
0

我有这样的代码:为什么点击事件被touchstart事件抑制?

$('.selector').on({ 
     touchstart: function (e) { 
      e.preventDefault(); 
      alert(3); 
      e.stopPropagation(); 
     }, 
     tap: function (e) { 
      e.preventDefault(); 
      alert(4); 
      e.stopPropagation(); 
     } 
     }); 

只有touchstart被触发。有人可以解释为什么吗?

P.S. :这是我包括jQuery Mobile的脚本: <script src="http://code.jquery.com/mobile/1.4.4/jquery.mobile-1.4.4.min.js"></script>

编辑: 我想在我的DIV的一个介绍一个悬停功能,我认为用自来水事件就会像单击并像悬停touchstart 。

$('.selector').on('tap swipe', function (e) { 
     e.preventDefault(); 
     if(e.type == 'swipe') { 
      alert(1); 
     } 
     if(e.type == 'tap') { 
      alert(2); 
     } 
     e.stopPropagation(); 
     }); 

     $('.selector .sel1').on('tap swipe', function (e) { 
     e.preventDefault(); 
     if(e.type == 'swipe') { 
      alert(3); 
     } 
     if(e.type == 'tap') { 
      alert(4); 
     } 
     e.stopPropagation(); 
     }); 

有了这个代码在我的div轻扫事件工作正常,但对于内部元件我无法重现刷卡事件,仅自来水被触发。我真的不明白为什么。

回答

0

这样使用语法:

$('.selector').on("touchstart tap", function(e){ 
    e.preventDefault(); 
    if(e.type == "touchstart"){ 

     alert(3); 

    } 
    if(e.type == "tap"){ 

     alert(4); 

    } 
    e.stopPropagation(); 
}); 
+0

即使我点击我的div,第一个触发的事件是touchstart,所以只会显示警报3。我想分开touchstart和tap的行为。 – 2014-10-06 09:32:59

0

Touchstart似乎不再提供为jQuery Mobile的版本内的本地事件。 1.4.5也许你可以使用“点击”和“滑动”(或“swipeleft”/“swiperight”)来实现你的目标?它不完全清楚你正在创建什么。

注意:您可以做的一件事就是轻松定制原生jQuery Mobile功能进行滑动。详细信息请参见http://api.jquerymobile.com/swipe/

在创建.on(“swipe”...)绑定之前,您可以更改jQuery swipe使用的测试值。它简单易行

$.event.special.swipe.horizontalDistanceThreshold = 100; // in lieu of 30px 

您可以通过警报或console.log()验证数据设置。也许这会对你有用?嗯..通过在垂直距离阈值上工作,您实际上可以临时将“滑动”定义为“向上滑动”,然后您可以使用滑动,swiperight和滑动来进行游戏。