Я пытаюсь разумно развязать события в jquery, чтобы я мог легко включить/отключить их. Я пытаюсь избежать использования переменных состояния, потому что это не обязательно, и это делает мои общие функции очень загроможденными. Вот что я пробовал изначально, но это не сработало.jQuery интеллектуальное событие unbind
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
Если вы сделаете это в ответ, я проголосую для этого. Если нет, я сделаю сам пост за один день. – Vap0r