Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript preventDefault()在touchstart上捕获mouseleave事件_Javascript_Jquery - Fatal编程技术网

Javascript preventDefault()在touchstart上捕获mouseleave事件

Javascript preventDefault()在touchstart上捕获mouseleave事件,javascript,jquery,Javascript,Jquery,我们遇到了一个棘手的情况,即使用jquery来防止在touchstart上触发链接以模拟移动设备上的悬停。问题是使用e.preventDefault()不仅可以阻止touch事件将我们带到链接,还可以阻止mouseleave事件在另一个div上触发 这正好说明了我在说什么。当您触摸第一块时,鼠标悬停事件触发。然后,当您触摸框2时,将触发mouseleave事件。然而,如果你触摸第一框,然后触摸第三框,mouseleave事件不会触发,这会在我们的整个网站上造成问题 有什么建议吗?我们尝试了各种

我们遇到了一个棘手的情况,即使用jquery来防止在touchstart上触发链接以模拟移动设备上的悬停。问题是使用
e.preventDefault()
不仅可以阻止touch事件将我们带到链接,还可以阻止mouseleave事件在另一个div上触发

这正好说明了我在说什么。当您触摸第一块时,鼠标悬停事件触发。然后,当您触摸框2时,将触发mouseleave事件。然而,如果你触摸第一框,然后触摸第三框,mouseleave事件不会触发,这会在我们的整个网站上造成问题


有什么建议吗?我们尝试了各种方法,似乎无法阻止链接单击,同时允许触发mouseleave事件。

设置一个或两个用于不同状态的变量。例如,一个名为
CurrentlyDragingObject
disableAllButtons
的布尔值。然后,不要使用
e.preventDefault()
禁用该函数,而是检查已设置的状态变量并继续(或不继续)相应地。

处理
touchend
事件而不是
touchstart
事件允许适当的事件冒泡,触发另一个元素上的
mouseleave
事件,同时防止在触摸设备上打开链接。我更新了示例以反映这一变化:

我希望我们可以使用
单击
,但不幸的是,该链接还需要在非触摸设备上单击两次。由于我们只尝试在移动设备上复制hover,因此必须使用
touchstart
。就我所知,至少是这样。啊,我现在理解你的用例了-如果你绑定到
touchend
而不是
touchstart
,这样链接仍然没有打开,但是正确的事件仍然冒泡,从而触发
mouseleave
,那该怎么办呢:这似乎就成功了。我可以发誓我们试过了,但我想不是。我对这一点有点陌生,但我很高兴将其标记为正确的解决方案。让我知道最好的方法。很高兴它能起作用!我会更新原始答案,你可以将其标记为解决方案。你能给我们举一个使用钢笔的例子吗?我们使用一个类来确定何时使用
e.preventDefault()
,但这仍然会阻止mouseleave事件为另一个div触发。