jQuery tap功能在android上触发两次

时间:2013-03-22 21:59:47

标签: jquery plugins tap

我部分修改了jquery.tapend插件,以阻止它在touchmove上触发tap事件以及其他一些问题。这是代码:

(function($) {
  $.fn.tap = function(fn) {
    return $(this).click.apply(this, arguments) // listen for the final event
                  .bind('touchstart.jqtapstart', function waitForTouchEnd(e) {
      function click(e) {
        cancel(e);
        $(this).trigger('click');
      }
      function move(e) {
        clearTimeout(timeout);
        $this.unbind('.jqtapend');
      }
      function cancel(e) {
        clearTimeout(timeout);
        if ('object' === typeof e && 'function' === typeof e.preventDefault) {
          e.preventDefault();
          e.stopPropagation();
        }
        $this.unbind('.jqtapend');
      }
      var timeout = setTimeout(cancel, 250)
        , $this   = $(this) // maybe > 1 node
        ;

      $this.bind({
          'touchend.jqtapend': click,
          'touchmove.jqtapend': move,
          'touchleave.jqtapend': cancel
      });
    });
  };
})(jQuery);

出于某种原因,Android设备上的每个“tap”事件都会触发两次,很少在iOS上发生,但仍然会发生。任何人都可以看到为什么会发生这种情况,或者有理论吗?

请注意,我出于某些原因选择不使用jquery mobile。

0 个答案:

没有答案