Если они одинаковые, то почему таких мероприятий два?
В чем разница между onblur и onfocusout в веб-браузерах?
Ответы (5)
Как вы знаете, событие onBlur срабатывает для элемента, если этот элемент имел фокус, но теряет его.
В этом случае возникает событие onFocusOut, но оно также запускается, если какой-либо дочерний элемент теряет фокус.
Например, у вас есть div со специальным форматированием, потому что человек в настоящее время редактирует поле в этой области. Вы можете использовать onFocusOut, чтобы отключить это форматирование, когда фокус покидает этот div.
До недавнего времени onFocusOut использовался только IE. Если это изменилось, то это произошло совсем недавно. Тестируйте в FF, Chrome и т. Д.
onfocusout
. jsfiddle.net/4n39h/1
- person Dan Dascalescu; 13.11.2012
e.type
для jQuery обработчик кликов для blur
- это focusout
, а не blur
, я не понимаю, почему.
- person user1063287; 30.08.2018
Согласно спецификации для focusout тип события:
Этот тип события похож на размытие, но отправляется до смещения фокуса и всплывает.
В то время как blur
события всплывают и отправляются позже.
Событие focusout срабатывает, когда элемент собирается потерять фокус.
Основное различие между этим событием и размытием заключается в том, что фокусировка всплывает, а размытие - нет. В большинстве случаев их можно использовать как взаимозаменяемые.
В документации Jquery есть хорошая демонстрация focusout
vs. blur
, которую я воспроизведу ниже для ясности. Короче говоря, focusout
срабатывает, если селектор - $('p')
в демонстрации - это что угодно, включая входы и родительские элементы. Принимая во внимание, что blur
срабатывает, только если селектор находится на входах - $('input')
.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>focusout demo</title>
<style>
.inputs {
float: left;
margin-right: 1em;
}
.inputs p {
margin-top: 0;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div class="inputs">
<p>
<input type="text"><br>
<input type="text">
</p>
<p>
<input type="password">
</p>
</div>
<div id="focus-count">focusout fire</div>
<div id="blur-count">blur fire</div>
<script>
var focus = 0,
blur = 0;
$( "p" )
.focusout(function() {
focus++;
$( "#focus-count" ).text( "focusout fired: " + focus + "x" );
})
.blur(function() {
blur++;
$( "#blur-count" ).text( "blur fired: " + blur + "x" );
});
</script>
</body>
</html>
По сути, в 2017 году разницы нет:
https://www.quirksmode.org/js/events_order.html
Немногие веб-разработчики сознательно используют захват или всплытие событий. На веб-страницах в том виде, в каком они создаются сегодня, просто нет необходимости позволять обрабатывать восходящее событие несколькими разными обработчиками событий. Пользователи могут запутаться в нескольких вещах, происходящих после одного щелчка мыши, и обычно вы хотите, чтобы ваши сценарии обработки событий были разделены.