Со следующей HTML-структурой:
<div>
<form><span><input></span></form>
</div>
<p>
и следующий код jquery:
$('form').on("focus", function(event) {
$("p").append("focus no delegation<br>");
})
Почему фокусное событие никогда не достигает моего обработчика событий? Привязка события с параметром селектора работает нормально:
$('form').on("focus", "input", function(event) {
$("p").append("focus delegation<br>");
})
Событие, в котором работает следующий фрагмент, так что событие фокуса действительно всплывает ...
$('form').on("focus", "span", function(event) {
$("p").append("focus delegation<br>");
})
Обе формы работают с событиями click и change:
$('form').on("click", function(event) {
$("p").append("click no delegation<br>");
})
$('form').on("click", "input", function(event) {
$("p").append("click delegation<br>");
})
Единственное замечание, которое я нашел о всплывающем событии в фокусе, относится к более старым версиям jQuery, которые я не использую. Смотрите это в действии здесь
изменить 1
Ну, это сбивает с толку ... Согласно документу jQuery:
Событие фокуса не всплывает в Internet Explorer. Поэтому сценарии, которые полагаются на делегирование события с событием focus, не будут работать согласованно в разных браузерах. Однако в версии 1.4.2 jQuery обходит это ограничение, сопоставляя фокус с событием focusin в своих методах делегирования событий .live () и .delegate ().
И в соответствии с фокусом документа jQuery:
Событие focusin отправляется элементу, когда он или любой элемент внутри него получают фокус. Это отличается от события фокуса тем, что оно поддерживает обнаружение события фокуса на родительских элементах (другими словами, оно поддерживает всплытие событий).
Уже слишком поздно для меня или одно противоречит другому?