Alexander Bruch: IE focus() problem bei onblur, wenn tabindex gesetzt ist.

Beitrag lesen

Hallo zusammen,

ich habe hier ein recht verzwicktes Problem, bei dem ich mich zur Zeit im Kreis drehe und hoffe daher auf eure Unterstützung. vielleicht wurde dieses Problem hier schon behandelt, aber ich habe diesbezüglich nichts gefunden.

Ich habe eine HTML-Seite vorbereitet, welches das Problem verdeutlicht:
<HTML><HEAD>
<SCRIPT id=ClientJavaScript type=text/javascript>
function onblur_id1()
{
  info('onblur_id1');
  var elem1=document.getElementById("id3");
  elem1.focus()
}

function onblur_id2()
{
  info('onblur_id2');
  var elem2=document.getElementById("id4");
  elem2.focus()
}

function info(msg){
  eleminfo=document.getElementById('idinfo');
  eleminfo.value=eleminfo.value + msg + '\n';
}
</SCRIPT>

</HEAD>
<BODY>

Feld (F1)   <input  id=id1   name=F1   tabIndex=1 maxlength="5"  onblur=onblur_id1(); value=""><br>
Feld (F2)   <input  id=id2   name=F2   tabIndex=2 maxlength="5" onblur=onblur_id2(); value=""><br>
Feld (F3)   <input  id=id3   name=F3   tabIndex=3 maxlength="5" onblur=onblur_id3(); value=""><br>
Feld (F4)   <input  id=id4   name=F4   tabIndex=4 maxlength="5" value=""><br>
<textarea rows=10 cols=50 name=info id=idinfo></textarea>
</BODY></HTML>

  • 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.

Die Sprünge sind in diesem Zusammenhang und im folgenden Skript zwar sinnlos, sollen aber auch nur ein Fallbeispiel des deutlich umfangreicheren Skriptes darstellen, bei dem diese Sprungreihenfolge in Abhängigkeit der eingegebenen Werte durchaus vorkommen kann.

Mein Problem ist nun das folgende:
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)
Da dieses zweite Feld im onblur wiederum den Fokus auf das 4 Feld setzt, landet der Fokus nicht wie gewünscht in Feld 3.

Im Hintergrund verwende ich ein Webbrowsercontrol mit einer  objectForScripting Klasse. Dort fange ich auch Tastendrücke ab und gebe ein false zurück, falls die Taste ignoriert wrden soll oder ein true falls nicht. Die TAB-Taste muss ich aber zulassen, da sonst die onblur Funktion nicht ausgeführt wird.

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 kann auch nicht beim fokusterhalt im Element den Tabindex auf -1 setzen, da nicht generell feststeht, ob in der onblur funktion ein Sprung stattfinden soll oder nicht. In einigen fällen soll kein Sprung stattfinden und dann das nächste Feld regulär über die TAB-Funktion angesprungen werden.

Schon mal danke für eure Hilfe

Gruß

Alex