我正在尝试智能地取消绑定 jquery 中的事件,以便我可以轻松地启用/禁用它们。我试图避免使用状态变量,因为它不应该是必需的,而且它使我的共享函数非常混乱。这是我最初尝试的方法,但没有奏效。
var dragStart = $('#ruler').mousedown(function(e){
position = container.offset();
mousePosition = {
x: e.pageX,
y: e.pageY
};
var dragging = $(document).mousemove(function(e){
var x = e.pageX - mousePosition.x;
var y = e.pageY - mousePosition.y;
container.offset({
left: position.left + x,
top: position.top + y
});
});
var dragStop = $(document).mouseup(function(){
dragStart.unbind();
dragging.unbind();
dragStop.unbind();
});
});
我发现这不起作用,因为 jQuery 的事件处理函数返回对选择器中元素的引用,因此所有内容都与 $(document) 解除绑定,这在我的环境中是一个问题。
我知道我可以提出函数名称并进行有针对性的取消绑定,但是对于我必须做的所有不同的函数(不仅仅是显示的),这会使代码难以通过。有什么方法可以让我的功能类似于我在上面的代码中想要的功能?我在想这样的事情:
var foo;
$(<selector>).<eventType>(foo = function(){
// DO SOMETHING
$(<unbind button>).click(function(){
// foo.unbind();
// OR
// $(<selector>).unbind(foo);
// ???????
});
});
我什至愿意接受创造性的解决方案。我现在可以让它工作,但我想看看我是否能以这种特殊的方式做到这一点。谢谢!