StopPropagation без jQuery
Я привязываюсь к ссылке (используя функцию .live()
jQuery) click
, а затем вручную добавляю обработчик событий onclick
с чистым JS и HTML (например, <a href="".... onclick="some action">
). Я хочу предотвратить пузырь событий в методе live
, но я не знаю, как это сделать.
Может быть, e.stopPropagation()
полезен в этой ситуации, но обработчик событий, добавленный с помощью onclick
, написан в чистом JS, и я не могу вызвать stopPropagation()
из-за оболочки элемента jQuery. return false
в этой ситуации не работает. Я попытался заменить return false
на $.Event('click').stopPropagation()
, но я думаю, что это неправильно, поскольку это не сработало.
Как предотвратить метод bubling для live()
без оболочки jQuery?
Ответы
Ответ 1
С . live, вы не можете прекратить распространение. Это связано с тем, что с .live
обработчик события привязан к корню дерева DOM. Следовательно, событие должно пузыриться до самого высокого элемента, прежде чем ваш обработчик может быть вызван. Его одно из предостережений при использовании .live
.
Рассмотрите возможность использования . delegate (если вы хотите, чтобы обработчик сохранялся) или используйте .bind.
Если вы хотите, чтобы активный обработчик был отключен полностью, используйте die:
$("#myHref").die("click", aClick); // this will remove any existing event handlers
$("#myHref").click(yourhandler); // add your handler
Демо 1: JsFiddle 1
Или добавьте встроенный обработчик (и отмените событие оттуда):
<a href=".." onclick="yourhandler">
Демо 2: JsFiddle 2
Обработчики Inline будут вызываться сначала всегда перед любыми обработчиками событий jquery.
Ответ 2
Я был в предположении, что return false
в "нормальных" обработчиках событий также предотвращает появление пузырьков, но я был не прав (спасибо @Mrchief).
Есть и другие способы остановить его, как описано в quirksmode.org:
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
cancelBubble
для IE, stopPropagation
работает во всех совместимых с W3C браузерах.