Ich habe eine HTML-Seite vorbereitet, welches das Problem verdeutlicht:
Das ist auf jeden Fall schonmal gut. Aber ich verstehe nicht was du erwartest.
Ein HTML fragment, das das Problem im IE7 verdeutlichen soll.
Im FF lassen sich das 2. und 4. Feld nicht anklicken. Der Focus springt immer von 1 nach 3 und zurück.
FF soll auch nicht genutzt werden. Dennoch, bei mir gehts mit FF. Vielelicht haben wir verschiedene Versionen / Einstellungen ?
Bei mir im IE 7 kann ich mit TAB überhaupt nicht die Felder wechseln, nur mit Shift-Tab (und dann wieder mit TAB).
Das ist seltsam. Wenn ich im Feld1 bin und drücke TAB, dann lande ich in Feld4. das verdeutlicht, dass die onblur funktion von feld2 aufgerufen wurde. Was nochmal durch die Eintragung in der TextArea verdeutlicht wird.
Feld (F1) <input id=id1 name=F1 tabIndex=1 maxlength="5" onblur=onblur_id1(); value=""><br>
Dein HTML ist stark verbesserungswürdig.
Ja leider ist das nicht mein HTML. Schau dir mal den HTML-Code an, der vom IE7 erzeugt wird, wenn du das mshtml Webbrowsercontrol, speziell das HTMLDocument in den Designmodus versetzt und ein Element einfügst. Dann wird so nen Code erzeugt. Aber er soll ja auch ausschliesslich vom IE7 wieder gelesen werden.
- ich verwende IE7. Im FF funktioniert alles wie erwartet.
- beim Verlassen des ersten Feldes mit TAB soll der Fokus auf das dritte Feld gesetzt werden.
- Das zweite Feld soll beim Fokuserhalt (onfocus) auf das 4 Feld springen.
Das passiert bei mir in keinem Browser.
Tschuldigung. Habe ich verwechselt. Das zweite Feld soll beim verlassen (onblur) auf Feld 4 Springen.
Wenn ich das erste Feld verlasse springt wie erwartet die onblur an. Allerdings springt auch die onblur Funktion des zweiten Feldes an (wahrscheinlich wegen dem tabindex)
Das widerrum kann ich im IE nachvollziehen.
DAS IST AUCH DAS HaAUPTPROBLEM, DAS ICH VERDEUTLICHEN WOLLTE.
Die anderen Felder dienen nur, damit das ganze auch nachvollziehbar ist. Aber vielleicht trägt das auch eher zur Verwirrung bei???
was ich also bräuchte wäre eine Möglichkeit in der onblur Funktion dafür zu sorgen, dass die "TAB-Funktion" des IE bei Bedarf unterbrochen werden kann. Entweder vom Javascript aus oder per C# - mit Zugriff über mshtml auf den DOM-Baum...
Ich weiß ja nicht wann diese Bedingung eintritt, aber Vielleicht kann dir eine onfocus Funktion helfen. Im IE ist es so wie beschreibst und du hast eine Schleife immer zurück auf das 1. Feld.
Aber im grossen ganzen hört sich das eher so an, als ob du vielleicht die Logik hinter dem ganzen ändern solltest. Da du offensichtlich zwei sich gegenseitig widersprechende Bedingungen hast.
Leider geht das nicht anders. Wie gesagt es handelt sich hier nur um den Auszug eines deutlich komplexeren Systems dessen Logik vereinfacht ausgedrückt in etwa wie folgt sein soll:
Jedes Feld kann über eine PRE- und eine POST- Logik verfügen. Die PRE Logik wird beim betreten des Feldes ausgeführt, die Postlogik wird beim verlassen des Feldes ausgeführt.
Das ist vereinfacht die Logik dahinter.
Was aber nun passieren kann ist folgendes:
In der Post-Logik eines Felds(onblur) soll der Fokus auf ein anderes Feld gesetzt werden. (z.B. weil ein bestimmter Wert eingegeben wurde)
Diese POST-Logik (onblur) wird ja nun ausgeführt wenn ich TAB drücke.
Was aber jetzt auf keinen Fall passieren darf, ist dass trotz manuellem wechsel des Fokuses (elem.focus()) die PRE-Logik des laut Tabindex logischen nachfolgenend Feldes ausgeführt wird.
Und genau das passiert im IE.
Wenn ich Feld1 verlasse und die onblur Funktion in Kraft tritt und den Fokus auf Feld3 setzt, darf keinenfalls die onfocus und onblur von Feld zwei ausgeführt werden, nur weil es laut tanbindex als nächstes dran wäre.
Struppi.
Ich hoffe wir sind jetzt auf einem Nenner. Habee mich da in der ersten Beschreibung vielleicht etwas missverständlich ausgedrückt.
Trotzdem schonmal Danke für deine Antwort
Gruß
Alex