какой элемент HTML потерял фокус? - PullRequest
1 голос
/ 18 ноября 2008

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

Ответы [ 5 ]

0 голосов
/ 09 сентября 2009

Можно делегировать события фокуса и размытия, если вы будете следовать советам ППК, здесь: http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html

0 голосов
/ 18 ноября 2008

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

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

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

0 голосов
/ 18 ноября 2008

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

0 голосов
/ 18 ноября 2008

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

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

0 голосов
/ 18 ноября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...