ruben: Tabulator abfangen

Beitrag lesen

Hallo!

Ich möchte in einem etwas umständlicheren Formular, das "gracefully degraden" soll, eine etwas kompliziertere Tabulator-Reihenfolge umsetzen und stoße auf Browser-Schwierigkeiten, die ich nicht dokumentiert finde.

function klugestab(tastendruck) {  
if(!tastendruck) tastendruck = window.event;  
 if(tastendruck.which) { // Netscape-Syntax  
  tastencode = tastendruck.which; // ü la n  
  }  
 else if(tastendruck.keyCode) { // IE-Syntax  
  tastencode = tastendruck.keyCode; // ü la IE  
  }  
 alert(tastencode);  
 if(tastencode==9) {  
  document.getElementsByName('bekannt')[0].focus();  
  return false;  
  }  
 }  
function waehlneue() {  
 if(document.getElementsByName('sprache')[0].value == 'neueSprache') {  
  document.getElementsByName('neuesprache')[0].focus();  
  }  
 }  

[code lang=html]<select  name="sprache" id="sprache" size="1" tabindex="2" onchange="waehlneue();">
 <option value="Englisch">Englisch</option>
 <option value="neueSprache">Neue Sprache -></option>
</select>
<input type="text" name="neuesprache"  size="24" onkeydown="klugestab()" />
<label for="sprache">Sprache</label>
<textarea  name="bekannt" id="bekannt" rows="4" cols="40" tabindex="3"></textarea><label for="bekannt">Bekannt</label>[/CODE]

Ich hab natürlich schon alle möglichen Variationen ausprobiert, aber in dieser erscheint mir das Problem am deutlichsten:
Eigentlich soll "neuesprache" übersprungen werden, es sei denn, man wählt in dem Select "neuesprache" als Option aus. Dadurch wird nämlich "neuesprache" fokussiert.
Wenn man es wieder verlässt, dann soll man trotzdem zu "bekannt" kommen und nicht zum Ende des Dokuments (wo es ja vom nichtdefinierten Tabindex her steht).

Folgendes passiert:
Der Safari kommt mit der Funktion waehlneue nicht klar, damit beschäftige ich mich später.
Der Firefox fokussiert zwar erst "bekannt", springt danach aber auf das nächste Element, der Tabulator wird also nicht abgebrochen (was ich mit "return false" bezwecke).

Ich bin auch dankbar für einen anderen Ansatz, allerdings will ich dieses Script in anderer Verkleidung auch an anderer Stelle verwenden, wo ein anderer Ansatz wohl kaum möglich ist.

Vielen Dank, stehe vermutlich auf dem Schlauch, hab lang kein JS mehr benutzt,
Ruben