Нажатие на элементы в jQuery вызывает пузырь до тела. Если у нас есть обработчик кликов, привязанный к телу, который показывает предупреждение, то нажатие на любой элемент будет пузыриться до тела и запускать предупреждение. Мой вопрос заключается в том, есть ли способ узнать, было ли вызвано предупреждение тела в результате прямого нажатия на тело или был вызван щелчок из-за пузыря до тела.
Есть ли способ проверить, вызвал ли пузырь клик?
Ответ 1
Сравните event.target
с this
. this
всегда является событием, в котором связан обработчик; event.target
всегда является элементом, в котором произошло событие.
$(document.body).click(function(event) {
if (event.target == this) {
// event was triggered on the body
}
});
В случае элементов, которые, как известно, уникальны в документе (в основном, просто body
), вы также можете проверить nodeName
this
:
$(document.body).click(function(event) {
if (event.target.nodeName.toLowerCase() === 'body') {
// event was triggered on the body
}
});
Вы должны сделать toLowerCase()
, потому что случай nodeName
несовместим между браузерами.
Последний параметр - сравнить с идентификатором, если у него есть один элемент, потому что они также должны быть уникальными:
$('#foo').click(function(event) {
if (event.target.id === 'foo') {
// event was triggered on #foo
}
});
Ответ 2
Вы можете проверить, что было нажато с помощью event.target
:
$(something).click(function(e){
alert(e.target)
})
Ответ 3
Параметр "event", переданный обработчику, имеет свойство "target", которое относится к элементу, который был прямой целью события. Вы можете проверить это свойство, чтобы увидеть, есть ли элемент <body>
.
Обратите внимание, что средство jQuery ".delegate()" может использоваться для проверки этого.