两个jQuery事件处理程序 - 在两个都被触发时执行代码

时间:2011-05-06 10:20:13

标签: javascript jquery events

我想在触发两个事件处理程序时运行一些代码。 我试过这样的话:

$('#box').mousedown(function(){ 
    $(document).bind('mousemove',function(e){ 
       // more code here 
    }); 
}); 

但是当我触发mousedown一次并在那之后移动我的鼠标时,代码甚至可以工作。我只想在鼠标停机并且移动时执行代码。 我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

试着试一试吗?有一个全局变量,指示鼠标是否已关闭。当他们在#box元素上进行moused时,全局变量设置为true。当他们进行鼠标操作时,它会重新设置为false。的 See a live example here

$(document).ready(function(){
    var mouseDown = false;

    $("#box").mousedown(function(){
        mouseDown = true;
    });

    $(document).mouseup(function(){
        mouseDown = false;
    });

    $(document).mousemove(function(){
        if (mouseDown){
            //do your stuff here
        }
    });
});

答案 1 :(得分:3)

我认为您遇到的问题是您对事件处理程序的工作方式有所了解,一旦添加了事件处理程序,它就会监听事件处理程序。

所以你的代码会在dom准备就绪时添加一个事件处理程序来监听mousedown,一旦它发生,它将为mousemove添加一个事件 - 文档现在已经注册了两个事件处理程序,所以它将独立完成两件事。

您要执行的操作是删除mousemove事件上mouseup的事件处理程序。这样,文档现在不再侦听mousemove事件处理程序,因为它已被删除。

$('#box').mousedown(function(){
    $(document).bind('mousemove',function(e){ 
        // Do something:
    }); 
});
$(document).mouseup(function(){
    $(document).unbind('mousemove'); 
});

Here is a simple example,所以你可以看到发生了什么,它会在box下添加一条消息。

答案 2 :(得分:0)

使用

event.stop()

event.die()
在使用该事件之前

摘录。 例如:

$("#mybutton").unbind("click");
$("#mybutton").die();
$("#mybutton").click(function(){ alert("Hy mate!");});