【发布时间】:2016-09-21 02:04:06
【问题描述】:
我在触摸设备上使用 JQuery 的 $.on("click", function(){}); 时遇到了不受欢迎的行为。这是我下面的代码:
代码:
$(".team").on("mouseover", teamMouseOver);
$(".team").on("mouseout", teamMouseOut);
$(".team").on("click", teamThumbClicked);
function teamMouseOver(event){
console.log(event.type);
}
function teamMouseOut(event){
// Do something
}
function teamThumbClicked(event){
console.log("Clicked!");
}
问题:
使用上面的代码,在触摸设备上点击 .team 元素会同时触发两个侦听器,给我以下控制台日志:
mouseover
Clicked!
问题
为什么在触摸设备上触发mouseover?这不是我对没有鼠标的设备所期望的行为。这是一个错误吗?我应该使用什么事件,所以“鼠标悬停”只有在它是一个实际的鼠标指针进入时才会被触发?
我的 JQuery 版本是 2.2.4。
【问题讨论】:
-
这是正确的行为。你想达到什么目的?我最近遇到了同样的问题(在移动“点击”上添加了不需要的类)并且能够使用 CSS 特异性解决这个问题:developer.mozilla.org/en-US/docs/Web/CSS/Specificity
-
我在
mouseover上显示一个工具提示,并在click上隐藏它。如果这两个事件同时触发,则工具提示将保持可见,因为您单击了它应该被隐藏。这就是为什么当设备没有鼠标时我不需要触发mouseover。我认为这就是touch事件的用途。 JQuery 这样做是为了模拟 :hover 效果吗? -
@MarcoDelValle 你最终解决了这个问题吗?我正在尝试解决类似的错误。谢谢!
-
@unsingefou 我不记得了,因为那是一年多以前的事了,但我想如果
"touchstart"发生在"clicked"之前,我禁用了"mouseover"事件侦听器。这很复杂,但这是我发现的唯一一种允许同时具有鼠标和触摸输入的设备的方法。
标签: javascript jquery touch mouseevent touch-event