Bücher online kostenlos Kostenlos Online Lesen
JQuery Kochbuch (German Edition)

JQuery Kochbuch (German Edition)

Titel: JQuery Kochbuch (German Edition) Kostenlos Bücher Online Lesen
Autoren: jQuery Community Experts
Vom Netzwerk:
Ziffern lang und auf vier Eingabefelder aufgeteilt. Damit die Eingabe möglichst schnell vorgenommen werden kann, soll das Springen zum nächsten Eingabefeld so weit wie möglich automatisiert werden, sobald ein Eingabefeld vollständig ausgefüllt ist:

    Seriennummer
    
    
    
    

    Lösung
    Selektieren Sie innerhalb von

alle

-Elemente. Mit der jQuery-Methode
.bind()
binden Sie dieEvents
keydown
und
keyup
. Wir verlassen die gebundene Funktion gleich wieder, wenn eine Taste aus einer Liste gedrückt wurde, die für das Autotabbing nicht weiter von Interesse ist. Wenn ein

-Element komplett »ausgefüllt« wurde (zu prüfen über das Attribut
maxlength
), rufen wir für das nächste

-Element die Methode
.focus()
auf. Umgekehrt rufen wir
.focus()
für das vorige

-Element auf, wenn die Rückschritt-Taste genutzt wurde und das aktuelle Eingabefeld leer ist:
$('fieldset.autotab input').bind('keydown keyup',function(event){

    // Tastencode für die gerade gedrückte Taste
    var keyCode = event.which;

    // folgende Tasten sollen ignoriert werden:
    // 9 Tab, 16 Shift, 17 Ctrl, 18 Alt, 19 Pause Break, 20 Caps Lock
    // 27 Esc, 33 Page Up, 34 Page Down, 35 End, 36 Home
    // 37 Left Arrow, 38 Up Arrow, 39 Right Arrow, 40 Down Arrow
    // 45 Insert, 46 Forward Delete, 144 Num Lock, 145 Scroll Lock
    var ignoreKeyCodes =
',9,16,17,18,19,20,27,33,34,35,36,37,38,39,40,45,46,144,145,';
    if ( ignoreKeyCodes.indexOf(',' + keyCode + ',') > −1 ) { return; }

    // wir ignorieren Backspace nur bei keydown
    // normal arbeiten lassen, sonst den Fokus nicht ändern
    if ( keyCode == 8 && event.type == 'keydown' ) { return; }

    var $this = $(this);
    var currentLength = $this.val().length;
    var maximumLength = $this.attr('maxlength');

    // Backspace ohne weitere Zeichen: zurück gehen
    if ( keyCode == 8 && currentLength == 0 ) {
     $this.prev().focus();
    }

    // Feld ausgefüllt: nächstes Feld
    if ( currentLength == maximumLength ) {
     $this.next().focus();
    }
});
    Diskussion
    Warum binden wir sowohl
keydown
als auch
keyup
an die Funktion?
    Sie könnten nur das Event
keydown
verwenden. Wenn aber der Anwender das erste Feld ausgefüllt hätte, gäbe es dann keinen sichtbaren Hinweis darauf, dass die nächste Eingabe direkt im zweiten Feld landet. Durch das Event
keyup
erhält das zweite Feld den Fokus, der Cursor wird an den Anfang des Feldes gestellt und die meisten Browser zeigen den Fokus durch einen Rahmen oder eine andere Art des Hervorhebens an. Zudem ist das Event
keyup
für die Rückschritt-Taste notwendig, um den Fokus auf das vorige Feld setzen zu können, wenn das aktuelle Eingabefeld geleert wurde.
    Sie könnten auch nur das Event
keyup
nutzen. Aber wenn sich Ihr Cursor im zweiten Eingabefeld befindet und Sie es mit der Rückschritt-Taste leeren, wird der Fokus in das erste Eingabefeld zurückgesetzt. Leider ist das erste Feld schon voll, daher geht der nächste Tastendruck aufgrund des Attributs
maxlength
verloren und das Event
keyup
würde dann wieder dafür sorgen, dass das zweite Eingabefeld in den Fokus gelangt. Tastenaktionen zu verlieren, ist wirklich schlecht, daher führen wir die gleiche Prüfung bei
keydown
durch. Dadurch wird der Cursor in das nächste Eingabefeld bewegt, bevor das Zeichen verloren geht.
    Da diese Logik nicht viel Rechenleistung verbraucht, können wir problemlos beide Events binden. In anderen Situationen müssen Sie eventuell genauer hinschauen.
    Ihnen wird vielleicht aufgefallen sein, dass die Variable
ignoreKeyCodes
ein String ist. Würden wir sie dynamisch aufbauen, wäre es schneller, ein Array zu erstellen und dann die JavaScript-Methoden
.join(',')
oder
.toString()
zu nutzen. Aber da der Wert immer gleich bleibt, ist es einfacher, direkt einen String zu nutzen. Ich verwende zudem in der Variablen
ignoreKeyCodes
auch am Anfang und Ende ein Komma, da ich auf jeden Fall falsch positive Suchergebnisse vermeiden möchte. Suche ich auf diese Weise nach einem
keyCode
, der durch Kommas umschlossen ist, dann finde ich garantiert nur die gesuchte Zahl – wenn ich nur nach
9
suchen würde, wären auch
19
oder
39
gefundene Ergebnisse.
    Beachten Sie, dass es keinen Code gibt, der den Aufruf von
$this.next().focus()
beim letzten

-Element verhindert. Ich nutze hier

Weitere Kostenlose Bücher