Подтвердить что ты не робот

Есть ли способ проверить, вызвал ли пузырь клик?

Нажатие на элементы в jQuery вызывает пузырь до тела. Если у нас есть обработчик кликов, привязанный к телу, который показывает предупреждение, то нажатие на любой элемент будет пузыриться до тела и запускать предупреждение. Мой вопрос заключается в том, есть ли способ узнать, было ли вызвано предупреждение тела в результате прямого нажатия на тело или был вызван щелчок из-за пузыря до тела.

4b9b3361

Ответ 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()" может использоваться для проверки этого.