Andre: Fokussieren des nächsten Eingabefeldes, aber nur bedingt

Hallo,

endlose Zahlenkolonnen in verschiedene Eingabefelder einzugeben macht keinen Spaß. Deshalb möchte ich gern, dass der Cursor zum nächsten Element springt, wenn die Länge des eigegebenen Textes die Maximallänge dieses Feldes ist. Mit JavaScript sieht das so aus:

function jumpToNext( from_obj, to_obj )
{
  from = document.getElementById( from_obj );

if (from.maxLength == from.value.length)
  {
    document.getElementById( to_obj ).focus();
  }
}

Problem dabei ist, dass bei einer Falscheingabe eines Wertes auf das Feld nicht mehr per Tab zurückgesprungen werden kann - die Textlänge ist ja die Maximallänge und damit geht der Cursor wieder eins weiter.

Hat irgendjemand eine Idee, wie man das beheben könnte?

Danke,
Andre

  1. hi,

    endlose Zahlenkolonnen in verschiedene Eingabefelder einzugeben macht keinen Spaß. Deshalb möchte ich gern, dass der Cursor zum nächsten Element springt, wenn die Länge des eigegebenen Textes die Maximallänge dieses Feldes ist.

    das wird mir als nutzer auch wenig spaß machen, denn die maximallänge kenne ich vermutlich nicht, oder wenn habe ich wenig lustig, beim tippen mitzuzählen - also wird der rest meiner fleißig weitergetippten eingabe dann unbeabsichtigt im nächsten feld landen ...

    Problem dabei ist, dass bei einer Falscheingabe eines Wertes auf das Feld nicht mehr per Tab zurückgesprungen werden kann - die Textlänge ist ja die Maximallänge und damit geht der Cursor wieder eins weiter.

    dann musst du wohl die art des aufrufs deiner prüffunktion ändern.
    derart, dass sie nicht jedes mal schon anspringt, wenn man mit tab ins feld geht oder sonstwie den fokus darauf setzt, sondern z.b. erst dann, wenn an der länge des inhaltes wirklich etwas geändert wurde ...

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. das wird mir als nutzer auch wenig spaß machen, denn die maximallänge kenne ich vermutlich nicht, oder wenn habe ich wenig lustig, beim tippen mitzuzählen - also wird der rest meiner fleißig weitergetippten eingabe dann unbeabsichtigt im nächsten feld landen ...

      Das ist aber nicht der Fall, wenn es sich um Zahlenkolonnen handelt, die eine feste Länge haben, ähnlich der S/N-Eingabe von einer Windoof-Installation. Es ist also beabsichtigt.

      dann musst du wohl die art des aufrufs deiner prüffunktion ändern.
      derart, dass sie nicht jedes mal schon anspringt, wenn man mit tab ins feld geht oder sonstwie den fokus darauf setzt, sondern z.b. erst dann, wenn an der länge des inhaltes wirklich etwas geändert wurde ...

      Das war mir auch klar, aber das funktioniert ja eben nicht.

  2. Hallo Andre,

    Du hast also so was ähnliches, wie ein Formular für Freischaltungscode von Software.

    function jumpToNext( from_obj, to_obj )
    {
      from = document.getElementById( from_obj );

    if (from.maxLength == from.value.length)
      {

    // leider hast Du nicht aufgeschrieben, welchen Eventhandler
    // Du nutzt
    // trifft die Bedingung zu, lösche einfach den Eventhandler
    // für var from, er wird nach mir logischen Gesichtspunkten
    // nicht mehr gebraucht

    document.getElementById( to_obj ).focus();
      }
    }

    Sollte das nicht ohne weiteres machbar sein, dann poste doch mal bitte den gesamten Quelltext.

    Gruß aus Berlin!
    eddi

    --
    at, wie er leibt und lebt auf ein Posting
    > > Nein, ich denke nicht.
    gepromptet
    > Das empfiehlt sich aber.
    :))))
    1. // leider hast Du nicht aufgeschrieben, welchen Eventhandler
      // Du nutzt
      // trifft die Bedingung zu, lösche einfach den Eventhandler
      // für var from, er wird nach mir logischen Gesichtspunkten
      // nicht mehr gebraucht

      *seufz* Danke für den Hinweis, das hatte ich einfach vergessen. Ich benutze onKeyUp für das Input-Feld:

      <input tabindex="1" type="text" id="part1" name="part1" size="8" maxlength="6" onKeyUp="javascript:jumpToNext('part1', 'part2');" />
      <input tabindex="2" type="text" id="part2" name="part2" size="8" size="6" /> usw.

      Wenn ich onKeyDown benutze, ist die Länge noch nicht aktualisiert. Benutze ich onChange, funktioniert es gar nicht.

      Was meinst du mit "lösche einfach den Eventhandler"? Warum wird er nicht gebraucht?

      1. Hallo,

        *seufz* Danke für den Hinweis, das hatte ich einfach vergessen. Ich benutze onKeyUp für das Input-Feld:

        <input tabindex="1" type="text" id="part1" name="part1" size="8" maxlength="6" onKeyUp="javascript:jumpToNext('part1', 'part2');" />

        onKeyUp="jumpToNext('part1', 'part2');" (ist ausreichend ;)

        Was meinst du mit "lösche einfach den Eventhandler"? Warum wird er nicht gebraucht?

        Von meiner Vermutung ausgehend, daß es soetwas in der Art eines Key-Forumlar ist, wird aller Wahrscheinlichkeit nach das Feld vollgeschrieben; - und das Feld für Feld. Alles weitere sind nur noch Nachbesserungen, weil man sich verschrieben hat. Für diese Aufgabe des Users (wie bereits bemerkt) ist Navigiren mit Tab wesentlich wichtiger als fortlaufendes Focusieren:

        function jumpToNext( from_obj, to_obj )
        {
          from = document.getElementById( from_obj );

        if (from.maxLength == from.value.length)
          {
            document.getElementById( to_obj ).focus();

        from.onkeyup='';

        }
        }

        Gruß aus Berlin!
        eddi

        --
        at, wie er leibt und lebt auf ein Posting
        > > Nein, ich denke nicht.
        gepromptet
        > Das empfiehlt sich aber.
        :))))
        1. Hallo eddi,

          from.onkeyup='';

          bis ich verstanden hab, was diese Zeile genau macht, sind ja auch Ewigkeiten vergangen.

          Vielen Dank, jetzt klappt es so, wie es sein sollte!

          Grüße aus Berlin nach Berlin,
          Andre