Hirschniesel: KeyEvent und Fokuswechsel im Internet Explorer

Hi Leute,

ich habe drei Textfelder, die in ihrer Gesamtheit ein Datum darstellen, eins für Tag, Monat und Jahr. Nun soll ich eine Javascript Funktion schreiben, die bei Eingabe des zweiten Zeichens z.B. in das Textfeld für den Tag automatisch zum Monat wechselt. Kein Problem, habe ich folgende kurze Javascript Funktion geschrieben:

  
function changeFocus(thisTextFieldId, nextTextFieldId, Ereignis, maxlength) {  
	var length = document.getElementById(thisTextFieldId).value.length + 1;  
	if (length == maxlength && !Ereignis.shiftKey) {  
		document.getElementById(nextTextFieldId).focus();  
	}  
}  

Erläuterung:
thisTextFieldId ist die ID des Textfeldes, in das der Wert eingegeben wurde
nextTextFieldId ist die ID des Textfeldes, das nach Eingabe des Wertes den Fokus bekommen soll
Ereignis ist das KeyEvent
maxlength ist die Anzahl an Zeichen, nach denen der Fokus wechseln soll

Den Shift-Key fange ich ab, um beim Rückwertstabben im Feld zu bleiben wenn dort schon 2 Zeichen eingegeben wurden.

Problem:
Im Firefox funktioniert das ganze hervorragend. Der Internet Explorer verweigert die zusammenarbeit, weil er scheinbar erst die key Events feuert und dann den eingegebenen Wert in das fokusierte Textfeld schreibt. Sprich, wenn ich bei Tag z.B. 12 eingebe, erscheint die 1 bei Tag und die 2 bei Monat...

Irgendwer eine Idee, wie ich das realisieren kann?

  1. Hi Leute,

    ich habe drei Textfelder, die in ihrer Gesamtheit ein Datum darstellen, eins für Tag, Monat und Jahr. Nun soll ich eine Javascript Funktion schreiben, die bei Eingabe des zweiten Zeichens z.B. in das Textfeld für den Tag automatisch zum Monat wechselt. Kein Problem, habe ich folgende kurze Javascript Funktion geschrieben:

    function changeFocus(thisTextFieldId, nextTextFieldId, Ereignis, maxlength) {
    var length = document.getElementById(thisTextFieldId).value.length + 1;
    if (length == maxlength && !Ereignis.shiftKey) {
    document.getElementById(nextTextFieldId).focus();
    }
    }

    
    >   
    > Erläuterung:  
    > thisTextFieldId ist die ID des Textfeldes, in das der Wert eingegeben wurde  
    > nextTextFieldId ist die ID des Textfeldes, das nach Eingabe des Wertes den Fokus bekommen soll  
    > Ereignis ist das KeyEvent  
    > maxlength ist die Anzahl an Zeichen, nach denen der Fokus wechseln soll  
    >   
    > Den Shift-Key fange ich ab, um beim Rückwertstabben im Feld zu bleiben wenn dort schon 2 Zeichen eingegeben wurden.  
    >   
    > Problem:  
    > Im Firefox funktioniert das ganze hervorragend. Der Internet Explorer verweigert die zusammenarbeit, weil er scheinbar erst die key Events feuert und dann den eingegebenen Wert in das fokusierte Textfeld schreibt. Sprich, wenn ich bei Tag z.B. 12 eingebe, erscheint die 1 bei Tag und die 2 bei Monat...  
    >   
    > Irgendwer eine Idee, wie ich das realisieren kann?  
      
    Hi,  
      
    ich habe eine vorsichtshalber mal als vorläufig zu bezeichnende Lösung gefunden. Sie besteht aus zwei Javascript Funktionen:  
    ~~~javascript
      
    function changeFocus(thisTextFieldId, nextTextFieldId, Ereignis, maxlength) {  
        var value = document.getElementById(thisTextFieldId).value;  
        var length = document.getElementById(thisTextFieldId).value.length + 1;  
        if (length == maxlength && !Ereignis.shiftKey) {  
            if (navigator.appName.indexOf('Internet Explorer') != -1) {  
    	    document.getElementById(thisTextFieldId).value = value + String.fromCharCode(Ereignis.keyCode);  
    	}  
    	document.getElementById(nextTextFieldId).focus();  
        }  
    }  
      
    function clearThis(targetId) {  
        if (navigator.appName.indexOf('Internet Explorer') != -1) {  
            var value = document.getElementById(targetId).value;  
    	if (value.length < 2) {  
    	    document.getElementById(targetId).value = '';  
            }  
        }  
    }  
    
    

    Erläuterung:
    die changeFocus() Methode wird im onKeyPress Event aufgerufen. Durch die Zeile

      
    document.getElementById(thisTextFieldId).value = value + String.fromCharCode(Ereignis.keyCode);  
    
    

    sorge ich dafür, dass das eingegebene Zeichen in dem richtigen Textfeld landet. Anschließend wird der Fokuswechsel ausgeführt. Damit die obige Zeile nur vom Internet Exlporer ausgeführt wird, habe ich eine entsprechende Abfrage drumherum gebastelt.

    Die Funktion clearThis() wird im onFocus Event aufgerufen und sorgt dafür, dass die fälschlicherweise eingetragene Zahl (im Falle des automatischen Fokuswechsels schreibt der Inter Explorer ja das eingegebene Zeichen in das fokussierte Textfeld) wieder entfernt wird. Auch dies braucht nur im Internet Explorer ausgeführt werden, was durch die if-Abfrage sichergestellt ist.

    Danke für die Hilfe und vielleicht kann das ja noch jemand anders gebrauchen...

    Schönen Feierabend