У меня есть DIV с классифицированным foobar
и несколько DIV внутри этого DIV, которые не классифицированы, но я предполагаю, что они наследуют foobar
класс:
$('.foobar').on('click', function() { /*...do stuff...*/ });
Я хочу, чтобы это срабатывало только при нажатии где-нибудь в DIV, но не на дочерних DIV.
===
или!==
используется «Алгоритм сравнения строгого равенства» ,==
а!=
в «Алгоритм сравнения абстрактного равенства» используется принудительный тип. Общая мудрость заключается в том, чтобы всегда использовать строгое сравнение, если нет особой необходимости в принудительном типе (поскольку его правила немного сложны) . В этом случае, поскольку объекты сравниваются, это на самом деле не имеет значения, но вы обнаружите, что большинство людей все равно будут придерживаться строгого сравнения.Есть еще один способ, который работает, если вы не возражаете, ориентируясь только на новые браузеры. Просто добавьте CSS
любым детям div вы хотите захватить клик. Вот таблицы поддержки
http://caniuse.com/#feat=pointer-events
источник
click
программный триггер события клика должен быть заблокирован?Вы можете использовать барботирование в свою пользу:
источник
<a>
элементах. Есть только одна проблема: когда я нажимаю на них средним нажатием, событие все равно срабатывает (проверено в Google Chrome). Есть ли вариант этого, который также предотвращает это?Я не получил принятый ответ на работу, но это, кажется, делает свое дело, по крайней мере, в vanilla JS.
источник
this
потому что объект, на которыйthis
указывает, может меняться в зависимости от области видимости и контекста, из которого он вызываетсяЭто остановит распространение (всплывающее)
click
событие на любом из дочерних элементов.foobar
элемента (ов), поэтому событие не достигнет.foobar
элемента (элементов), чтобы запустить их обработчик (и) события.Вот демо: http://jsfiddle.net/bQQJP/
источник
источник
У меня была такая же проблема, и я нашел это решение (на основе других ответов)
По сути, он говорит, что если целью является div, тогда запустите код, иначе ничего не делайте (не скрывайте его)
источник
Мой случай похож, но это тот случай, когда у вас есть несколько
foobar
ключей, и вы хотите закрыть только один - за один клик:Найти родительский случай
Найти детский кейс
источник
Вы можете использовать event.currentTarget. Это будет делать событие клика только тем, кто получил событие.
источник
Если вы не можете использовать
pointer-events: none;
и ориентированы на современные браузеры, вы можете использоватьcomposedPath
для обнаружения прямого щелчка по объекту, например так:Вы можете узнать больше о compedath здесь: https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
источник
источник