event.preventDefault()不适用于使用touchstart的Android平板电脑

时间:2013-11-19 15:15:15

标签: javascript android jquery

我有响应式下拉菜单,对于平板电脑用户,我取消了点击,因此使用event.preventDefault()的下拉菜单 这在ipad上工作正常但在Android上却不行。函数本身就像我做了一些测试一样,但event.preventDefault()不会取消点击。我尝试过返回false,但它对我也不起作用。 我已经看到几个相关的帖子很安静,但无法找到解决方案。 我使用的javascript是:

$("#nav li a").on({ 'touchstart' : function(event) { 
        //if there is a submenu we cancel the click to show the drop down
        if (String($(this).parent().find('ul').html())!='undefined')
        {
            event.preventDefault();
        }
    }
});//end of touch event

3 个答案:

答案 0 :(得分:2)

听起来你的事件可能正在冒泡,尝试event.stopPropagation(); 另外看看双击插件,我之前也遇到过这个问题。

Demo

答案 1 :(得分:0)

尝试检查touchend - Android也为preventDefault提供了一些时髦的行为。此外,如果你的问题是在锚点上发生这种情况,请考虑用javascript替换锚点的href:void(0);

Instead of this:
<a href="#">Open Menu</a>

Do this:
<a href="javascript:void(0);">Open Menu</a>

在整个生命周期中触摸事件,看起来preventDefault与停止其他事件(touchmove,{{1}有任何关系等等)。

您还可以查看jQuery的touchend事件,它会尝试淡化鼠标点击事件并将事件触及到一个类似的事件中,但您一定要阅读注释和警告http://api.jquerymobile.com/vclick/

答案 2 :(得分:0)

也许在Android上,touchendclick事件也会被触发。您是否尝试将这些事件添加到听众中?试试这个:

$("#nav li a").on({ 'touchstart touchend click' : function(event){ 
   if (String($(this).parent().find('ul').html())!='undefined'){
       event.preventDefault();
   }
}});