wo ist der cursor?
Klaus
- javascript
0 Markus**2 molily0 Felix Riesterer0 molily
Hallo
wie man den focus (den cursor) setzt ist klar:
document.form.testfeld.focus();
Aber wie kann ich herausfinden welches Feld gerade den focus hat?
Klaus
wie kann ich herausfinden welches Feld gerade den focus hat?
http://molily.de/weblog/javascript-fokus-zentral
Mathias
Lieber Klaus,
Aber wie kann ich herausfinden welches Feld gerade den focus hat?
meines Wissens gibt es keine allgemein unterstützte JavaScript-Eigenschaft (z.B. document.focussedNode oder ähnliches), die Du in allen Browsern abfragen könntest. Daher müsste man sich soetwas selbst bauen (wenn man keine Bibliothek verwendet, die das bereits mitbringt).
Idee: Definiere Dir eine neue Eigenschaft für Dein document-Objekt. Wenn Du diese Eigenschaft nicht explizit anlegst, musst Du eventuell immer erst prüfen, ob sie überhaupt existiert.
document.focussedNode = null;
Jedes Deiner Formular-Elemente belegst Du mit einem onfocus-Event, welches nichts anderes tut, als sich selbst (also eine Referenz auf das gerade fokussierte Element) in obige document-Eigenschaft einzutragen, und ein onblur-Event, welches dafür sorgt, dass das Element wieder ausgetragen wird.
function initialisiereFormularElemente (formular) {
var i;
for (i = 0; i < formular.elements.length; i++) {
// onfocus-Event
formular.elements[i].onfocus = function () {
// "this" enthält eine Referenz auf das Element, welches das Event auslöst:
document.focussedNode = this;
};
// onblur-Event
formular.elements[i].onblur = function () {
if ( // Eigenschaft überhaupt definiert?
document.focussedNode
// Steht das Element noch in document.focussedNode?
&& document.focussedNode == this
) {
// ja -> entfernen
document.focussedNode = null;
}
};
}
}
Obige Funktion kannst Du erst dann ausführen lassen, wenn das Dokument vollständig geladen wurde, da Du sonst nicht alle Elemente erreichst, oder gar das Formular zum Zeitpunkt des Funktionsaufrufs noch nicht existiert. Näheres dazu hier: Autostart eines JavaScripts.
Liebe Grüße,
Felix Riesterer.
meines Wissens gibt es keine allgemein unterstützte JavaScript-Eigenschaft (z.B. document.focussedNode oder ähnliches)
Nun, die gibt es: document.activeElement. Wird allerdings noch nicht von allen Browsern unterstützt, es ist jedoch einfach, sie bei fehlender Unterstützung nachzubauen.
Jedes Deiner Formular-Elemente belegst Du mit einem onfocus-Event
Genau für solche Anwendungsgebiete gibt es Event Capturing bzw. Event Delegation mit bubblenden (DOM)focusin-Events, was die Sache viel, viel einfacher macht.
Mathias