Hoe kom ik erachter welk DOM-element de focus heeft?

Ik wil er graag achter komen, in JavaScript, welk element op dit moment focus heeft. Ik heb de DOM doorzocht en heb nog niet gevonden wat ik nodig heb. Is er een manier om dit te doen, en hoe?

De reden waarom ik hiernaar op zoek was:

Ik'probeer toetsen als de pijltjes en enter te laten navigeren door een tabel met invoerelementen. Tab werkt nu, maar enter, en pijlen doen dat standaard niet lijkt het. Ik'heb de toetsbehandeling deel opgezet, maar nu moet ik uitzoeken hoe de focus te verplaatsen in de event handling functies.

Oplossing

Gebruik document.activeElement, deze wordt ondersteund in alle grote browsers.

Voorheen, als je probeerde uit te vinden welk formulier veld focus heeft, kon je dat niet. Om detectie in oudere browsers te emuleren, voeg een "focus" event handler toe aan alle velden en sla het laatst gefocuste veld op in een variabele. Voeg een "blur" handler toe om de variabele te wissen bij een blur event voor het laatst gefocusseerde veld.

Verwante koppelingen:

Commentaren (11)

Zoals JW al zei, je kunt het huidige gefocuste element niet vinden, althans niet op een browser-onafhankelijke manier. Maar als je app alleen IE is (sommige zijn dat...), kun je het op de volgende manier vinden :

document.activeElement

EDIT: Het lijkt erop dat IE toch niet alles fout had, dit is onderdeel van HTML5 draft en lijkt te worden ondersteund door de laatste versie van Chrome, Safari en Firefox in ieder geval.

Commentaren (8)

Ik zet dit hier neer om de oplossing te geven die ik uiteindelijk bedacht heb.

Ik creëerde een eigenschap genaamd document.activeInputArea, en gebruikte jQuery's HotKeys addon om toetsenbordgebeurtenissen voor pijltjestoetsen, tab en enter op te vangen, en ik creëerde een event handler voor het klikken in invoerelementen.

Daarna paste ik de activeInputArea aan telkens wanneer de focus veranderde, zodat ik die eigenschap kon gebruiken om uit te zoeken waar ik was.

Het is echter gemakkelijk om dit te verknoeien, want als je een bug in het systeem hebt en de focus is niet waar je denkt dat hij is, dan is het heel moeilijk om de juiste focus te herstellen.

Commentaren (0)