JQuery вопрос отменить - PullRequest
2 голосов
/ 27 июля 2011

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

например

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

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

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

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

Ответы [ 5 ]

0 голосов
/ 27 июля 2011

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

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

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

0 голосов
/ 27 июля 2011

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

Этот код:

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

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

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

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

0 голосов
/ 27 июля 2011

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

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

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

Вот что такое .die()for:

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

0 голосов
/ 27 июля 2011

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

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

хорошо, если у вас есть функция fn1, а затем у вас есть,

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

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

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

тогда твоя польза для звонка сначала отменить привязку ... удалить fn1

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

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

редактировать

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

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

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

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

$(".content_media").live("touchstart",function(){....});
0 голосов
/ 27 июля 2011

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

$(".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).

...