阻止event.click在Safari中触发event.mousemove

时间:2011-03-12 21:22:44

标签: jquery

似乎在jQuery中,元素上的click事件也会自动触发该元素的mousemove事件。有什么方法可以阻止这种情况吗?

这是我可以整理的最基本的测试用例。对我来说,使用触控板,单击该框会触发mousemove事件。我没有发现鼠标光标有任何移动。

http://jsfiddle.net/nay5d/

更新:我在Safari,Chrome和Firefox中测试了代码。在Safari中,单击会触发鼠标移动。在Chrome / Firefox中,似乎点击不会触发鼠标移动。有趣。

4 个答案:

答案 0 :(得分:1)

我刚刚进行了一些测试,我觉得这不是正在发生的事情。如果您没有使用元素注册mousemove事件,则不会触发任何事件。如果您正在注册一个mousemove事件,那么您应该注意到鼠标移动的最小部分(包括单击该对象时发生的移动)将导致mousemove事件被触发。

根据您要完成的任务,您可能需要查看one of the many other mouse events,或以完全不同的方式完成您的功能。 (如果您发布了这个功能的最终目标,我可以尝试为您提供帮助。)

答案 1 :(得分:1)

我也使用Safari中的遗留方法获得相同的结果。 mouseMove上会触发额外的mouseUp事件。示例:http://jsfiddle.net/s7r8d/

document.onmousemove = function(mouseEvent) {
    mouseEvent || (mouseEvent = window.event);
    var target = mouseEvent.target || mouseEvent.srcElement;
    if (target.id=="dom") {
        target.className = target.className=="highlight"
            ? ""
            : "highlight";
    }
}

即使尝试强制mouseUp事件也不成功。如果确实是Safari漏洞,我们可以尝试向Apple报告此错误。

答案 2 :(得分:1)

Hy先生,我尝试过这样做似乎很有效,至少在chrome

http://jsfiddle.net/ZNHDT/

$('h1').bind('mousemove', swapClass);

function swapClass() {
    $('h1').toggleClass('highlight');
}

$('h1').mousedown(function(ev){
    $("h1").unbind("mousemove");
    console.log("pippo");
})
$('h1').mouseup(function(){
    setTimeout(function(){
    $("h1").bind("mousemove", swapClass);
    },10);
});

答案 3 :(得分:0)

我想不是,只要您的鼠标位于点击区域,您也将触发mousemove事件。

这是一个例子: http://jsfiddle.net/marcosfromero/3KHQG/