2013-06-27 31 views
3

我试图检测mouseup或touchend事件,而没有它发射两次。完整的示例在这里:preventDefault()不停止在Android上的mouseup事件

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
     $("#t").on("touchend mouseup", function(e){$("body").append(e.type + "<br>"); e.preventDefault();}); 
     }); 
    </script> 
    </head> 
    <body> 
    <div id="t" style="position: absolute; left: 200px; width: 200px; height: 200px; background: blue;"></div> 
    </body> 
</html> 

在平板电脑上,在touchend事件触发,然后再延迟一段时间后,鼠标松开事件触发。所以我包含e.preventDefault()行,并根据需要在iPad上停止mouseup事件。但它对Android没有影响。这两件事仍然发生。使用“返回false”,stopPropagation()和/或stopImmediatePropagation()也没有效果。请注意,我可以删除touchend事件,但我不希望平板电脑上的延迟等待mouseup启动。我需要为非平板设备包含mouseup。我也不想测试触摸功能,然后解除鼠标支持,因为有人可以同时拥有支持触摸和鼠标的笔记本电脑并使用它们。我只想让Android停止触发mouseup事件。

+0

你可以尝试从回调中返回false吗? – bitoiu

+0

@bitoiu,我在文章中提到“return false”。它也没有工作。 – kbriggs

回答

0

谷歌几年前曾有一篇关于这件事的文章,称之为FastButtons。此实现应该这样做:

https://developers.google.com/mobile/articles/fast_buttons

+0

我没有实现一个按钮控件,也没有解释为什么preventDefault不像iOS那样使用touchend。然而,该文章中的一件事引起了我对使用touchDefault的preventDefault的关注。如果我在绑定中包含touchstart,然后在触发时忽略它,preventDefault将在Android中停止鼠标事件。仍然看起来像一个bug。我有一个旧版本的Android(2.2.1),因此可能从那时起它已经被修复。 – kbriggs

0

我只是遇到了同样的问题,只能找到一个很丑陋的解决方案:setTimeout

http://jsfiddle.net/FjuHu/6/

/** 
    * Prevent Android from triggering buggy phantom clicks 
    * 
    * @param {jQuery} $element 
    */ 
    function preventPhantomClicks($element) { 
    /** 
    * Click catcher 
    * @param {!jQuery.event=} event 
    */ 
    function preventHandler(event) { 
     event.preventDefault(); 
    } 

    // catch all events for the next 350ms 
    $element.on('click', preventHandler); 
    setTimeout(function() { 
     $element.off('click', preventHandler); 
    }, 350); 
    } 
0

我是用意想不到的事情摔跤(突然的Android mouseups为例)。

因为我正在侦听touchup并获得意想不到的mouseup,所以我的解决方案是将所有事件传递到一个筛选器([node] .setEventListener),这将决定我是否希望它们发生,并且我会阻止任何我不希望通过在批准的事件对象上设置自定义标志,并阻止/阻止任何缺少事件的事件。

我能够避免这种超时。不优雅,但暂时建立更多的控制系统。

相关问题