Markus: Focusproblem bei input-textfeldern

Ich moechte gerne eine Validierung mit Javascript erzeugen, die mit dem Ereignis onblur altiv wird. Sprich ein input textfeld wird validiert, sobald sein Focus verlassen wird. Falls nun die Validierung nicht erfuellt ist, mochte ich gerne wieder den foucs auf dieses feld haben und den inhalt markiert haben.
Das muesste doch moeglich sein?

Gruesse und Dank

Markus

  1. Hallo,

    Ich moechte gerne eine Validierung mit Javascript erzeugen, die mit dem Ereignis onblur altiv wird. Sprich ein input textfeld wird validiert, sobald sein Focus verlassen wird.

    Das verstehe ich nicht so ganz

    Falls nun die Validierung nicht erfuellt ist, mochte ich gerne wieder den foucs auf dieses feld haben und den inhalt markiert haben.

    Das muesste doch moeglich sein?

    Ja das ist möglich. Die Methode heißt select().

    Gruß aus MeckPomm

    --

    'Glauben kann keine Berge versetzen, aber der Glaube vermag Berge dahin zu stellen, wo noch keine Berge sind.'
    Friedrich Nietzsche
    1. Hi,

      Ich moechte gerne eine Validierung mit Javascript erzeugen, die mit dem Ereignis onblur altiv wird. Sprich ein input textfeld wird validiert, sobald sein Focus verlassen wird.
      Das verstehe ich nicht so ganz

      was war daran so unverständlich?
      Okay, ein wenig unbeholfen formuliert, aber doch eindeutig.

      Falls nun die Validierung nicht erfuellt ist, mochte ich gerne wieder den foucs auf dieses feld haben und den inhalt markiert haben.
      Das muesste doch moeglich sein?
      Ja das ist möglich. Die Methode heißt select().

      Nein, die Methode heißt focus(), wer hätte das gedacht?

      So long,
       Martin

      --
      Wer schläft, sündigt nicht.
      Wer vorher sündigt, schläft besser.
      1. Hello out there!

        Falls nun die Validierung nicht erfuellt ist, mochte ich gerne wieder den foucs auf dieses feld haben

        Die Methode heißt focus().

        und den inhalt markiert haben.

        Die Methode heißt select().

        Wer hätte das gedacht? ;-)

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
        1. Hello out there!

          Hello from in here,

          und den inhalt markiert haben.
          Die Methode heißt select().
          Wer hätte das gedacht? ;-)

          fein beobachtet. Aber wird der Inhalt eines Textfeldes bei focus() nicht automatisch auch markiert? Keine Ahnung, wie das auf anderen Plattformen ist, aber mir ist das unter Windows oft schon aufgefallen. Meist ist das auch erwünscht, manchmal aber eher lästig.

          Schönen Tag noch,
           Martin

          --
          Du kannst dem Leben nicht mehr Tage geben.
          Aber dem Tag mehr Leben.
          1. Hello out there!

            Aber wird der Inhalt eines Textfeldes bei focus() nicht automatisch auch markiert?

            Kann ich nicht bestätigen.

            Eher wird bei select auch der Focus gesetzt (ohne Gewähr).

            See ya up the road,
            Gunnar

            --
            “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
            1. Hi Gunnar,

              Aber wird der Inhalt eines Textfeldes bei focus() nicht automatisch auch markiert?
              Kann ich nicht bestätigen.

              okay, ich hab's in der Zwischenzeit auch nochmal gecheckt: Wenn ich in einer beliebigen Applikation über die entsprechende Win32 API-Funktion den Fokus auf ein Textfeld setze, wird dessen Inhalt auch automatisch selektiert. Nur im Browser ist das nicht so, und anscheinend habe ich da etwas durcheinandergebracht.

              So long,
               Martin

              --
              Irgendwann in grauer Vorzeit benutzte einer unserer prähistorischen Vorfahren ein Schimpfwort anstelle der Keule.
              Die Zivilisation hatte begonnen.
              1. Hallo an alle,

                erstmals vielen Dank fuer eure Antworten.
                Ich werd euch mal meinen Code posten, wobei ich immer noch nicht im Stande bin, den Focus nach der Validierung auf das gewuenschte inputfeld  zu setzen.

                function validate(id) {
                  if(document.getElementById(id) != null) {
                    if(isNaN(document.getElementById(id).value)) {
                      document.getElementById(id).value = -1;
                      document.getElementById(id).focus();
                    } else {
                      alert("element is null!");
                    }
                  }
                }

                aufgerufen von:
                <input type="text" id="fld_difficulty"  onblur="validate('fld_difficulty');"/>

                Danke nochmals

                Gruesse Markus

                1. Der else Block ist etwas falsch, aber das ist nicht das Problem.
                  Hier nochmals die funktion:

                  function validate(id) {
                    if(document.getElementById(id) != null) {
                      if(isNaN(document.getElementById(id).value)) {
                        document.getElementById(id).value = -1;
                        document.getElementById(id).focus();
                      }
                    } else {
                      alert("element is null!");
                    }
                  }

                  Markus

                  1. Hallo Markus,

                    Der else Block ist etwas falsch, aber das ist nicht das Problem.

                    ach was? Wie meinst du das nun?

                    Hier nochmals die funktion:

                    Ich stelle fest, dass du viermal getElementById() mit demselben Argument aufrufst. Dein Script durchsucht also viermal den Elementbaum nach demselben Element. Das kann man optimieren, indem man die Referenz, die man beim ersten Aufruf bekommt, in einer Variablen speichert:

                    function validate(id) {
                      if ((item=document.getElementById(id)) != null) {
                        if (isNaN(item.value)) {
                          item.value = -1;
                          item.focus();
                        }
                      } else {
                        alert("element is null!");
                      }
                    }

                    Ansonsten verstehe ich nicht, was dir an dem else-Zweig noch nicht gefällt.

                    So long,
                     Martin

                    --
                    Wer im Steinhaus sitzt, soll nicht mit Gläsern werfen.
                    1. Sorry ich hatte mich da verschaut (dachte der else ist in der inneren if anweisung). Der else block passt!

                      Ich stelle fest, dass du viermal getElementById() mit demselben Argument aufrufst. Dein Script durchsucht also viermal den Elementbaum nach demselben Element. Das kann man optimieren, indem man die Referenz, die man beim ersten Aufruf bekommt, in einer Variablen speichert:

                      Danke fuer den Hinweis.

                      Ich versteh aber immer noch nicht, weshalb das gewuenschte Feld anschliessend den focus nicht mehr erhaelt.

                      Gruesse und Dank

              2. Hallo.

                Wenn ich in einer beliebigen Applikation über die entsprechende Win32 API-Funktion den Fokus auf ein Textfeld setze, wird dessen Inhalt auch automatisch selektiert. Nur im Browser ist das nicht so, und anscheinend habe ich da etwas durcheinandergebracht.

                MacOS X markiert den Inahlt konsistent nicht beim Fokussieren. Weder im Browser noch in anderen Anwendungen, sofern sie mit Werkzeugen erstellt wurden, die zumindest in diesem Punkt konform zu den GUI-Konventionen des Systems arbeiten.
                MfG, at

  2. Hallo Markus,

    Das muesste doch moeglich sein?

    Wie im detail Deine Validierung aussieht musst Du ja wissen, das andere geht in etwa so:

    Du kennst die Elemente   Deines Forms.
    Weise dem Input-Feld Deine Eventhanlder zu, die Deine Validierungsfunktion aufrufen.

    In dieser Funktion prüfst Du die Eingabe; ist sie nicht in Ordnung, dann setzt Du auf|in das Feld den focus().

    Mit freundlichem Gruß
    Micha

    1. Hi Micha,

      da ich bei meinem letzen Beitrag keine Antwort bekomme, schreib ich hier nochmals den code:

      function validate(id) {
        if ((item=document.getElementById(id)) != null) {
          if (isNaN(item.value)) {
           item.value = -1;
           item.focus();
           /* weder mit select() noch mit focus() bekomme ich den Focus auf das gewuenschte feld */
          }
        } else {
          alert("element is null!");
        }
      }

      die funktion wird beim Ereignis onBlur in einem Input Textfeld aufgerufen.

      Gruesse und Dank

      Markus

  3. hi,

    Falls nun die Validierung nicht erfuellt ist, mochte ich gerne wieder den foucs auf dieses feld haben und den inhalt markiert haben.

    Als Benutzer bin ich darauf nicht unbedingt vorbereitet - ich gehe also davon aus, dass wenn ich bspw. per [tab] das Feld verlasse, ich sofort im nächsten weitertippen kann.
    Jetzt hast du aber den Focus zurückgesetzt, _und_ auch noch den Inhalt des anderen Feldes markiert - ich tippe also nur ein einziges Zeichen, und schon wird der markierte Inhalt durch dieses ersetzt.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo.

      Als Benutzer bin ich darauf nicht unbedingt vorbereitet - ich gehe also davon aus, dass wenn ich bspw. per [tab] das Feld verlasse, ich sofort im nächsten weitertippen kann.
      Jetzt hast du aber den Focus zurückgesetzt, _und_ auch noch den Inhalt des anderen Feldes markiert - ich tippe also nur ein einziges Zeichen, und schon wird der markierte Inhalt durch dieses ersetzt.

      Ein von vielen Formularen bekannter Effekt, die den Fokus onload auf das erste Feld setzen. Besonders ärgerlich ist das natürlich, wenn eines oder mehrere der Felder Passwörter aufnehmen sollen, die dann entweder falsch oder offen lesbar eingegeben werden.
      MfG, at