我想在触发两个事件处理程序时运行一些代码。 我试过这样的话:
$('#box').mousedown(function(){
$(document).bind('mousemove',function(e){
// more code here
});
});
但是当我触发mousedown一次并在那之后移动我的鼠标时,代码甚至可以工作。我只想在鼠标停机并且移动时执行代码。 我怎样才能做到这一点?
答案 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!");});