Какой элемент HTML потерял фокус?

в javascript, когда я получаю событие фокуса, как я могу определить, какой элемент потерял фокус? Я пытаюсь избежать добавления обработчика событий onblur ко всем элементам моей веб-страницы.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
7 044
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

@pbrodka: свойство target / srcElement будет относиться к элементу с фокусом для событий onfocus

Навскидку, я не вижу способа избежать этого, кроме onblur, или, если все объекты, которые вам нужны, имеют методы фокуса, вы могли бы вместо этого сохранить ссылку на этот объект. Также возможно, что всплытие событий может вывести вас из тюрьмы.

все это похоже на запах кода - возможно, вам нужно описать проблему более подробно

Сложно это. Вы не можете использовать делегирование событий, чтобы узнать, какой элемент управления последним произвел размытие, поскольку фокус / размытие не всплывают. Было несколько попыток «исправить» это, но они содержат ошибки и не поддерживают кроссбраузерность. Могу я спросить, зачем вам эта информация, возможно, есть альтернативное решение.

К сожалению, событие onblur не всплывает, иначе вы могли бы обработать его на уровне окна, чтобы всегда знать, когда элемент потерял фокус.

В настоящее время я считаю, что будет сложно обойтись, как вы говорите, без добавления обработчика события onblur ко всем элементам (действительно неприятное решение ;-).

Самое простое решение - написать функцию, которая просматривает все формы, а затем все элементы внутри формы и устанавливает обработчик onblur для каждого (который, вероятно, вызовет некоторую глобальную функцию). Этот обработчик получит событие, и это событие будет содержать информацию, которую вы ищете.

Таким образом, вам просто нужно вызвать этот метод один раз в body.onload, и он будет работать независимо от того, насколько сложен ваш документ.

Единственный недостаток заключается в том, что вам нужно будет вызвать его, если вы динамически добавляете формы в текущий документ. В этом случае вы должны убедиться, что не устанавливаете обработчик снова (иначе вы получите ложные повторяющиеся события).

Это звучит ненадежно. Вам нужно будет сохранить ссылку на каждый элемент в какой-то глобальной переменной. IE может протекать как решето.

Rakesh Pai 18.11.2008 18:48

За исключением того, что оператор сказал: «Я пытаюсь избежать необходимости помещать событие onblur для всех элементов на моей веб-странице».

Lawrence Dol 06.12.2019 03:39

Можно делегировать события focus и blur, если вы последуете совету PPK, здесь: http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html

Другие вопросы по теме