Как узнать, какой элемент DOM имеет фокус?

Вы можете сделать:

SELECT column1, column2, column4 FROM table WHERE whatever

без получения столбца3, хотя, возможно, вы искали более общее решение?

1191
задан Luca Kiebel 13 September 2018 в 10:25
поделиться

4 ответа

Используйте document.activeElement , это поддерживается во всех главных браузерах.

Ранее, если Вы пытались узнать, какое поле формы фокусируется, Вы не могли. Для эмуляции обнаружения в более старых браузерах добавьте обработчик событий "фокуса" ко всем полям и запишите сфокусированное в последний раз поле в переменной. Добавьте обработчик "размытости" для очистки переменной на событие размытости для сфокусированного в последний раз поля.

Ссылки по теме:

1434
ответ дан 6 revs, 4 users 50% 13 September 2018 в 20:25
поделиться

Как сказано JW, Вы не можете найти текущий сфокусированный элемент, по крайней мере, независимым от браузера способом. Но если Вашим приложением является IE только (некоторые...), можно найти это следующим путем:

document.activeElement

РЕДАКТИРОВАНИЕ: похоже, что IE не имел всего неправильно, в конце концов, это - часть проекта HTML5 и, кажется, поддерживается последней версией Chrome, Safari и Firefox, по крайней мере.

117
ответ дан Wookai 13 September 2018 в 20:25
поделиться

Just putting this here to give the solution I eventually came up with.

I created a property called document.activeInputArea, and used jQuery's HotKeys addon to trap keyboard events for arrow keys, tab and enter, and I created an event handler for clicking into input elements.

Then I adjusted the activeInputArea every time focus changed, so I could use that property to find out where I was.

It's easy to screw this up though, because if you have a bug in the system and focus isn't where you think it is, then its very hard to restore the correct focus.

3
ответ дан 22 November 2019 в 20:35
поделиться

Небольшой помощник, который я использовал для этих целей в Mootools:

FocusTracker = {
    startFocusTracking: function() {
       this.store('hasFocus', false);
       this.addEvent('focus', function() { this.store('hasFocus', true); });
       this.addEvent('blur', function() { this.store('hasFocus', false); });
    },

    hasFocus: function() {
       return this.retrieve('hasFocus');
    }
}

Element.implement(FocusTracker);

Таким образом, вы можете проверить, находится ли элемент в фокусе с помощью el.hasFocus () при условии, что startFocusTracking () был вызван для данного элемента.

9
ответ дан 22 November 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: