javascript - JQuery .on ("click") 在触摸设备上触发 "mouseover"

标签 javascript jquery touch mouseevent touch-event

在触摸设备上使用 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。

最佳答案

我刚遇到同样的问题,这就是我解决问题的方法。

$('#myEl').on('click', myElClickEvent);

$('#myEl').on('mouseenter', myElMouseEnterEvent);

function myElClickEvent (event) {
   $(this).addClass('Clicked');
}

function myElMouseEnterEvent() {
    // Turn off events
    $('#myEl').off();

    // After 100 milliseconds cut on events, notice click event won't trigger
    setTimeout(function() {
       // .off() is used to prevent from adding multiple click events if the user hovers multiple elements too quickly.
       $('#myEl').off().on('click', myElClickEvent);             
       $('#myEl').off().on('mouseenter', myElMouseEnterEvent);
    }, 100);


   // Do some mouseenter stuff, whatever the reqs. are.
}

这就是我所做的,并且对我的用例来说效果很好。希望这对将来的人有帮助。这个想法是关闭鼠标输入事件中的点击事件,然后在 100 毫秒后将鼠标点击事件重新打开。这将防止这两个事件在触​​摸时触发。

关于javascript - JQuery .on ("click") 在触摸设备上触发 "mouseover",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37403733/

相关文章:

jquery - 无法从 JQuery 自动完成选择选项中进行选择

css - html5中的touch silde和mouse scroll有什么不同?

lua - 手动结束或取消corona sdk中的触摸阶段?

javascript - 输入名称为 "submit"时如何使用 Javascript 发送表单?

javascript - 如何检查字符串是否只包含一个空格?

javascript - 简单解释EINVALIDTAGNAME?

jquery - 空白的白色背景循环

隐藏在 Flash 横幅后面的 jQuery 日期选择器

ios - 在iOS App演示视频中显示拍子

javascript - 克隆javascript对象属性?