Запускать событие onclick дочернего элемента, но не событие родительского элемента

У меня есть несколько вложенных элементов, каждый с событием onclick. В большинстве случаев я хочу, чтобы оба события запускались, когда пользователь щелкает дочерний элемент (запускаются как родительские, так и дочерние события - поведение по умолчанию). Однако есть по крайней мере один случай, когда я хочу вызвать дочернее событие onclick (из javascript, а не из щелчка пользователя), но не из родительского. Как я могу предотвратить запуск родительского события?

введите описание изображения здесь

Кем я был:

Пользователь нажимает A: запускается onclick A.
Пользователь нажимает B: запускается onclick B, onclick A также запускается
Запуск клика B вручную: B срабатывает, A - нет (это проблема)


person yoozer8    schedule 10.12.2013    source источник


Ответы (2)


Используйте triggerHandler для дочернего элемента; это не позволит событию распространяться через DOM:

События, созданные с помощью .triggerHandler (), не всплывают в иерархии DOM; если они не обрабатываются целевым элементом напрямую, они ничего не делают.

person Jon    schedule 10.12.2013
comment
Именно то, что мне нужно! Я немного удивлен, что это не нашлось ни в одном из моих поисков. - person yoozer8; 11.12.2013
comment
.triggerHandler ('click') не работает в сафари. Любая работа для сафари? - person Shabnam K; 26.02.2016
comment
@Shab, вы можете использовать stopPropagation (). увидеть мой ответ - person Ĭsααc tիε βöss; 27.07.2016

Способ 1:

Вы можете использовать метод stopPropagation(), чтобы предотвратить всплытие событий.

$('.element').on('click', function(e){
e.stopPropagation();
});

Ознакомьтесь с этим DEMO

Способ 2:

Вы можете использовать return false, чтобы предотвратить всплытие событий, и это также предотвратит действие по умолчанию.

$('.element').on('click', function(e){
//--do your stuff----
return false;
});
person Ĭsααc tիε βöss    schedule 27.07.2016