为什么tap事件被touchstart事件抑制?

时间:2014-10-06 08:00:21

标签: jquery-mobile mobile 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上引入一个悬停功能,我认为使用tap事件就像点击一样,并使用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上的滑动事件可以正常工作,但对于内部元素,我无法重现滑动事件,只有触发才会触发。我真的无法弄清楚原因。

2 个答案:

答案 0 :(得分:0)

使用这样的语法:

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

      alert(3);

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

      alert(4);

   }
   e.stopPropagation();
});

答案 1 :(得分:0)

Touchstart似乎不再作为jQuery Mobile ver中的本机事件提供。 1.4.5也许你可以使用&#34; tap&#34;和&#34;刷卡&#34; (或&#34; swipeleft&#34; /&#34; swiperight&#34;)实现目标?它并不完全清楚你在创造什么。

注意:您可以做的一件事是轻松自定义本机jQuery Mobile功能以进行滑动。详见http://api.jquerymobile.com/swipe/

在进行.on(&#34;滑动&#34; ...)绑定之前,您可以更改jQuery滑动使用的测试值。它就像

一样简单
$.event.special.swipe.horizontalDistanceThreshold = 100;  // in lieu of 30px

您可以通过警报或console.log()验证数据设置。也许这对你有用吗?嗯..通过处理垂直距离阈值,你本质上可以暂时定义&#34;刷卡&#34;作为一个&#34;向上滑动&#34;,你可以使用swipeleft,swiperight和swipeup进行游戏。