I have a simple table:e.stopPropagation() не работает должным образом?
ВУ имеет <tr onclick='alert("row");'>
И кнопка имеет:
$("body").on('click',".b",function (e){
alert('button');
e.stopPropagation();
});
Однако - Хотя я писал e.stopPropagation();
все еще предупреждает: "строка, кнопка".
Теперь я знаю, что обработчик события присоединен к body
и селектор проверяется против него (начало щелчка на кнопке и перейти к телу, так же, как $.live
использование делать, но против document
...).
Но проверка должна быть указана для button
и не для TR
нажмите.
кажется, что в то время как я щелкая, она распространяется на "body"
(потому что я прикрепил обработчик события к нему) и в то время как его путь к телу активизирует нажмите на TR
.
Что здесь происходит? Как я могу сохранить свой код (прикрепить к телу) и все еще иметь только предупреждение о «кнопке».
P.s.
Я знаю, что могу просто сделать:
$(".b").on('click',function (e){
alert('button');
e.stopPropagation();
});
, но я хочу знать, почему мой текущий код не работает (!).
Как вы, кажется, понимают, что проблема заключается в том, что вы присоедините обработчик событий к телу, это не понятно, что вы» повторно прошу. –
@dystroy Я привязал обработчик к телу. да. но я также сказал - «прекратить распространение». поэтому IMHO он должен только предупредить «ряд». а оттуда - перестать подниматься. –
Делегация использует распространение события для достижения делегата. Вот почему событие, которое не пузырится (распространяться) как событие onload, не может использоваться с делегированием. –