Javascript ios webkit中的touchend事件未触发?
我正在尝试为基于ios webkit的应用程序实现一个菜单,在该应用程序中,用户触摸/单击并按住菜单按钮(“.menu_item”),500毫秒后子菜单打开(div.slide_up_sub_menu),用户应该能够将手指/鼠标向上滑动到子菜单项并释放Javascript ios webkit中的touchend事件未触发?,javascript,ios,webkit,touch-event,Javascript,Ios,Webkit,Touch Event,我正在尝试为基于ios webkit的应用程序实现一个菜单,在该应用程序中,用户触摸/单击并按住菜单按钮(“.menu_item”),500毫秒后子菜单打开(div.slide_up_sub_menu),用户应该能够将手指/鼠标向上滑动到子菜单项并释放 <li class="menu_item"> ASSET MANAGEMENT <div class="slide_up_sub_menu hidden_menu">
<li class="menu_item">
ASSET MANAGEMENT
<div class="slide_up_sub_menu hidden_menu">
<ul class="submenu">
<li>Unified Naming Convention</li>
<li>Version Control</li>
</ul>
</div>
</li>
但是,如果我使用touchend处理器进行同样的操作,它在ipad上就不起作用了:
$('ul.submenu li').live('touchend', function(e){
console.log($(e.currentTarget)); //never fires
});
如果我查找每个touchend事件,当我在子菜单项上结束触摸时,我可以获得对父子菜单项的引用:
$(document.body).bind('touchend', function(e) {
console.log($(e.target).html()); //logs ASSET MANAGEMENT
});
但没有对子菜单项的引用
有人知道为什么子菜单项上没有触发touchend事件吗
谢谢如果您不需要使用多点触控数据,您可以继续在ipad上使用鼠标 进一步阅读:
也许现在回答有点晚了。
此事件永远不会触发,因为touch事件在发生touchstart的元素上触发。因此,要执行您想要的操作,一种解决方案是使用document.elementFromPoint方法,您将向该方法发送适当的x和y坐标。touchend不会触发,因为touchcancel之前已触发。如果你想完全接触,甚至处理你需要打电话
e.preventDefault()
在“touchmove”事件的回调中,否则当发生touchmove事件时,如果浏览器确定这是一个滚动事件,它将触发touchcancel,而不会触发touchend。对于“touchmove”事件
如果您不想在touchmove上执行任何操作:
return false;
e.preventDefault();
如果您希望阻止默认行为,但在touchmove上执行一些代码:
return false;
e.preventDefault();
这个问题在iPad上更为明显。感谢roee的回答,不幸的是,当你触摸屏幕时,鼠标下移事件不会立即触发。它只有在你的手指与mouseup事件同时离开屏幕后才会触发。