Попытка обернуть голову вокруг функции jQuery ".not ()" и столкнуться с проблемой. Я хотел бы, чтобы родительский div был «кликабельным», но если пользователь нажимает на дочерний элемент, скрипт не вызывается.
$(this).not(children()).click(function(){
$(".example").fadeOut("fast");
});
HTML:
<div class="example">
<div>
<p>This content is not affected by clicks.</p>
</div>
</div>
e.stopPropagation();
вместоreturn false;
этого.}).find('.classes-to-ignore').click(function(e) {
чтобы выбрать определенные дочерние элементыe.stopPropagation()
а затем использоватьreturn false
вместо этого.return false
эквивалентно,e.preventDefault(); e.stopPropagation()
поэтому у него могут быть неожиданные побочные эффекты.Я использую следующую разметку и столкнулся с той же проблемой:
Здесь я использовал следующую логику:
С точки зрения точного вопроса, я вижу, что работает следующим образом:
или, конечно, наоборот:
Надеюсь, это поможет.
источник
.on("click", ...)
в последних версиях jQuery.live()
, что устарело с v1.7. См. Api.jquery.com/liveИли вы можете сделать также:
источник
Мое решение:
источник
Лично я бы добавил обработчик кликов к дочернему элементу, который ничего не делал, кроме как остановил распространение клика. Так это будет выглядеть примерно так:
источник
stopPropagation
возвратом ложных, как предлагают другие ответы?stopPropagation
может быть чище, так как не остановит события на дочерних элементах, что может случиться сreturn false
.Вот пример. Зеленый квадрат - родитель, а желтый - дочерний элемент.
Надеюсь, что это поможет.
источник