Du reagierst doch derzeit auf onchange, feuert das nicht schon während man etwas eingibt? Für das von dir beschriebene Ereignis verwende ich onblur.
Dabei dürftest du aber das Problem bekommen, dass man nie wieder den Cursor aus dem Feld bekommt ^^.
Ich überprüfe ja erst, ob in dem Feld etwas drin steht. Wenn nichts drinsteht, dann darf der Browser sein Tab ausführen wie er es gewohtn ist (also einfach in das nächste Feld den Fokus setzen).
Das Beispiel zu onblur sieht dem, was ich möchte schon sehr ähnlich. Das Problem dabei ist allerdings: Den Fokus zu setzen funktioniert bei Firefox nicht! Mit dem IE kein Problem.
Weil ich das fast nie mache, weiß ich gerade nicht mehr wie das geht, aber konnte man nicht indem man false returnt das Ereignis verhindern oder so ähnlich? Also in deinem Fall das Verlassen des Formular-Feldes.
Ich bin mir da aber furchtbar unsicher, also nagel mich nicht drauf fest, hier ein anderer Vorschlag:Schreib eine zweite Funktion, die das onfocus-Event des Elements, welches als nächstes in der Tabreihenfolge kommt abfängt und setze von dort aus deinen focus();
Sowas habe ich auch schon versucht:
z.B. mit onkeypress, und dann überprüfen ob Tab gedrückt wurde. Aber: Das funktioniert mit Firefox nicht. Der IE hat mir (zum Testen) immer ausgegeben, welcher Tastencode gedrückt wurde (z.B. 9 für Tab), FF hat nicht reagiert, bzw. nicht den Tastencode ausgegeben.
Was ich auch noch probiert habe: Bei Tab in ein neues Feld schreiben, aus welchem Feld der Fokus kam, den Fokus dann auf diese Feld setzen, und dann überprüfen: Wenn das neue Feld den Focus bekommt (onfocus), das Feld auslesen, und den Focus auf das entsprechende Feld setzen.
Das Auslesen hat auch noch funktioniert, den Focus zu setzen aber nicht.
Scheinbar hat FF eine andere Priorität beim abarbeiten.
MfG, Bart