jQuery вопрос об отвязке

Могу ли я использовать jQuery unbind() с live()

e.g.

$(".content_media").unbind("touchstart").live("touchstart",function(){....});

Если да, то что именно это означает? В основном я хочу понять, что означает unbind

У меня есть страница, на которой я привязываю элементы к готовому документу... и между ними есть вызовы AJAX, которые как бы переписывают одни и те же элементы... Теперь я ожидаю, что они будут вести себя одинаково всегда... поэтому я использовал live ()

Пожалуйста, поправьте меня, если здесь могут быть некоторые исключения, когда привязки live() не будут работать.


person copenndthagen    schedule 27.07.2011    source источник


Ответы (5)


Да, вы можете использовать unbind()Документ с live()Doc, как показано.

Этот код:

$(".content_media").unbind("touchstart").live("touchstart",function(){...

Отменяет привязку всех touchstart прослушивателей событий, которые были установлены через jQuery bind(), затем создает touchstart прослушивателей для текущего и любых будущих узлов с классом content_media.

Обратите внимание, что для прекращения установки слушателей с помощью live() необходимо использовать die()Doc.

Кроме того, эти средства не всегда затрагивают прослушиватели, установленные вне jQuery.

person Brock Adams    schedule 27.07.2011

Unbind означает удаление обработчиков событий из набора элементов. вы можете удалить только некоторые обработчики событий

$(".content_media").unbind("click");
//it means delete all click handlers on elements with class content_media

или все обработчики событий

$(".content_media").unbind()
//it means delete all handlers on elements with class content_media

Вы можете привязать новые живые события после их отмены, внимание с live() таково (взято из документации)

Поскольку метод .live() привязывает обработчики событий к документу по умолчанию, вызов .unbind() для документа также отменяет привязку обработчиков, связанных с .live(). Например, $(document).unbind('click'); удалит не только $(document).bind('click', fn1), но и $('a.foo').live('click', fn2).

person Nicola Peluchetti    schedule 27.07.2011

Отменить привязку означает удалить обработчики событий, которые вы ранее прикрепили к элементу:

Удалите ранее прикрепленный обработчик событий из элементов.

Но вы не можете использовать unbind для удаления обработчика событий, добавленного с помощью live, потому что live работает по-другому (он прикрепляет обработчик событий к корню документа).

Вот для чего нужен .die():

Удалите все обработчики событий, ранее прикрепленные с помощью .live() к элементам.

person Felix Kling    schedule 27.07.2011

Я не понимаю, к чему ты здесь отвязываешься..

$(".content_media").unbind("touchstart").live("touchstart",function(){....});

ну если у вас есть функция fn1 и то она у вас как,

$(".content_media").live("touchstart",fn1);

затем в определенный момент вы хотите использовать fn2 без fn1, например,

$(".content_media").live("touchstart",fn2);

тогда вам лучше сначала вызвать unbind... чтобы удалить fn1

$(".content_media").unbind("touchstart").live("touchstart",fn2);

но если вы просто хотите fn1, вам не нужно использовать unbind на самом деле...

изменить

если причина, по которой вы это делаете, заключается в том, что вы звоните по этой линии,

$(".content_media").unbind("touchstart").live("touchstart",function(){....});

в каждом исполнении ajax... тогда это оправдывает... но вы делаете это неправильно....

просто поместите его вне выполнения ajax и без отвязки, тогда все готово...

$(".content_media").live("touchstart",function(){....});
person Reigel    schedule 27.07.2011

Разница между live() и bind() заключается в том, что живые события всплывают в документе, а затем они обрабатываются jQuery и проверяются, какой элемент вызвал событие. Поэтому, если вы добавите больше элементов, соответствующих селектору ПОСЛЕ того, как вы уже вызвали live, все они вызовут событие.

Bind(), однако зависит от элемента, и вы должны вручную привязывать все новые элементы. В том смысле, что если вы сначала свяжете некоторые элементы и добавите больше (даже если они совпадают с селектором связывания), вам придется связать их снова (но будьте осторожны, чтобы не дважды связать исходные элементы).

Unbind() означает bind(), что die() соответствует live(). Вы можете отвязать только события, установленные с помощью bind(), и вы можете только die() события, которые установлены с помощью live(). Также стоит отметить, что вы не можете остановить распространение живых событий, в отличие от событий, которые были добавлены с помощью привязки.

person zatatatata    schedule 27.07.2011