$(document).unbind(click) убивает live?
Здравствуйте.
Подскажите, почему такая конструкция из jquery.contextMenu.js $(document).click( function() { $(document).unbind('click').unbind('keypress'); // когда комментирую эту строку, всё работает, за исключением нормальной функциональности контекстного меню, естественно (оно сразу скрывается при открытии, так как событие click обрабатывается и при нажатии правой кнопки мышки... $(menu).fadeOut(o.outSpeed); return false; }); приводит после первого открывания контекстного меню и щелчке по "документу" к неработоспособности такой конструкции: $('#panel > div.myclass').live('click', function(e) {...}); ? Как лучше выкрутиться? |
Попробуйте применять unbind (и, есстественно, навешивать нужные обработчики) не к document, а к document.body.
|
Благодарю, вроде как заработало :)
А где можно почитать на эту тему, чтобы понять в чём конкретно причина? Или это чисто по своему опыту с jQuery? |
live вешает обычный обработчик события на document и смотрит, равен ли event.target (элемент, на котором произошло событие) заданному и если да, то выполняет ф-цию. unbind же снимает все обработчики с документа, в т. ч. и те, что навешаны через live. Вообще-то, для снятия live-обработчиков применяется метод die, но это только если снимать обработчик с обычного элемента, а не документа, unbind же не убивает live-события для них. А вот если сделать это с самим документом, то возникает такая вот заморочка.
|
Цитата:
|
Вполне логичное поведение. Вы же не указываете, какой именно обработчик снять, поэтому снимаются все.
|
Цитата:
|
При использовании такого решения, как "document.body" - потом начались другие проблемы с другими плагинами. Помогло использование delegate() вместо live().
|
если в коде приходится пользоватся .unbind то советую также использовать namespace
.live тоже должен их понимать |
Часовой пояс GMT +3, время: 15:37. |