我試圖在jquery中智能地解除綁定事件,所以我可以輕鬆地啓用/禁用它們。我試圖避免使用狀態變量,因爲它不應該是必要的,它使我的共享功能非常混亂。以下是我最初嘗試過的方法,但沒有奏效。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的事件處理函數在選擇返回引用的元素,所以一切都正在從$(文件),這是在我的環境問題unbinded。
我知道我可以想出函數名並做一個有針對性的解除綁定,但是我必須做的所有不同的功能(不只是顯示),這會讓代碼很痛苦。有沒有什麼方法可以讓我的功能類似於上面代碼中的功能?我在想這件事:
var foo;
$(<selector>).<eventType>(foo = function(){
// DO SOMETHING
$(<unbind button>).click(function(){
// foo.unbind();
// OR
// $(<selector>).unbind(foo);
// ???????
});
});
我甚至會打開創意解決方案。我現在可以開始工作,但我試圖看看我是否可以這樣做。謝謝!
你應該使用'off'而不是'bind'並且你應該使用事件命名空間:http://docs.jquery.com/Namespaced_Events – vsync 2013-02-19 16:20:54
如果你把它做成一個答案,我會投票爲了它。如果沒有,我會在一天之內自己發帖。 – Vap0r 2013-02-19 16:30:11