Tostan: bei onChange fokus auf das selbe Feld setzen

Hallo,

Es ist mir fast schon peinlich bei einem so trivialen Problem zu fragen, habe auch schon die Suchfunktion bemüht, da muss es doch schon Lösungen geben ... aber scheinbar bin ich zu blöd.

Ich habe ein input-Feld, welches ich bei onChange auf einen korrekten Wert prüfe. Falls der Wert nicht valid ist, soll der Fokus wieder auf dasselbe Feld gesetzt werden.

Hier die Funktion:

  
    function check_time(element){  
      var Ausdruck = /([0-9]{1,2})\:([0-9]{1,2})/;  
        if (!Ausdruck.exec(element.value) || RegExp.$1 == "" || RegExp.$2 == "" || RegExp.$1 < 0 || RegExp.$1 > 23 || RegExp.$2 < 0 || RegExp.$2 > 59 ) {  
          alert("Ungültige Uhrzeit!");  
          element.value="";  
          element.focus();  
      }  
    }  

Die arbeitet auch prima, bis auf das element.focus().

Wird die per onChange aufgerufen, "verliert" das Element den Fokus.
<input type="text" name="timestart" id="timestart" size="5" maxlength="5" onChange="javascript:check_time(this)" />

Nehme ich einfach einen separaten Button zum Checken, wird der Fokus korrekt gesetzt.
<input name="test" type="button" id="test" onclick="javascript:check_time(document.getElementById('timestart'))" value="Test" />

Was mache ich da Falsch?

Tostan

  1. Ich habe ein input-Feld, welches ich bei onChange auf einen korrekten Wert prüfe. Falls der Wert nicht valid ist, soll der Fokus wieder auf dasselbe Feld gesetzt werden.

    Hier die Funktion:
    [code lang=javascript]
        function check_time(element){
          var Ausdruck = /([0-9]{1,2}):([0-9]{1,2})/;

    Hi warum darf ich nicht 13h17 eingeben?
    Willst du Input auswerten, oder willst du den user disziplinieren?

    mfg Beat
    --

    <o(((°>           ><o(((°>

    <°)))o><                     ><o(((°>o

    1. Hi warum darf ich nicht 13h17 eingeben?
      Willst du Input auswerten, oder willst du den user disziplinieren?

      Naja, wenn da steht "Bitte geben sie die Uhrzeit im Format hh:mm ein" und irgendjemand will hhhmm eingeben, dann kann er nicht lesen oder ist ein ignorant. Im deutschen Sprachraum(und das soll auf eine deutschsprachige Seite) ist nunmal hh:mm das übliche Uhrzeitformat.

      Aber darum geht es ja garnicht, der Reguläre ausdruck lässt sich schnell anpassen ... z.B. auf
      var Ausdruck = /([0-9]{1,2})(\:|h)([0-9]{1,2})/;
      oder ähnliches (... natürlich dann auch ein ":%s/RegExp.$2/RegExp.$3/g" ausführen ;) )

      aber dieses element.focus() setzt den Fokus nicht, und warum das nicht?

      Tostan

    2. Hi!

      Hi warum darf ich nicht 13h17 eingeben?
      Willst du Input auswerten, oder willst du den user disziplinieren?

      Und woher willst Du wissen, welche Formate so eingegeben werden? Man sollte sich schon auf ein gültiges Format einigen und alle anderen ausgrenzen, wenn man denn Usereingaben überhaupt zulassen möchte. Wenn ich eins gelernt habe, dann daß man Usereingaben kaum validieren kann. Erst neulich hatte einer unserer italienischen Kollegen ein Problem, das dadurch entstand, daß er in seinen Office-Dateien zwar ein europäisches Datumsformat eintrug (dd.mm.jj) allerdings einen amerikanisch konfigurierten Rechner benutzte.

      Ohne Kalender gibts bei uns schon lange keine Datumseingaben mehr. Wenn Dir User es ohne murren benutzen würden, gäbe es auch ein Zeitformular. Tja. mit den so entstanden Fehlern müssen wir immer wieder leben. Woher kann ich als Programmierer auch wissen, was der User mit 17.25 nun meint? 17 Uhr 15 Minuten wäre richtig und wird vorausgesetzt.

      --
      "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
            - T. Pratchett
      1. Ohne Kalender gibts bei uns schon lange keine Datumseingaben mehr. Wenn Dir User es ohne murren benutzen würden, gäbe es auch ein Zeitformular. Tja. mit den so entstanden Fehlern müssen wir immer wieder leben. Woher kann ich als Programmierer auch wissen, was der User mit 17.25 nun meint? 17 Uhr 15 Minuten wäre richtig und wird vorausgesetzt.

        Zeitangaben sind Verhandlungssache. Das liegt an der Komplexität vonDatumsabgaben im Allgemeinen und an der Tatsache, dass Server und Client/User in verschiedenen Zeitzonen sitzen können.
        Formatpurismus allein bringt dich da nicht weiter. Wenn du aber schon das Datum verhandeln musst (ergo es eine aktive Rückmeldung bedarf) kann man sich auch in der Freundlichkeit des Parsens üben.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
      2. Hallo,

        Woher kann ich als Programmierer auch wissen, was der User mit 17.25 nun meint? 17 Uhr 15 Minuten wäre richtig und wird vorausgesetzt.

        das mag bei einer mathematischen Interpretation der eingegebenen Zeit richtig sein, aber es ist sehr untypisch. Der Punkt wird auch häufig als Trennzeichen zwischen Stunden und Minuten (und ggf. Sekunden) verwendet.

        Solange also der Kontext "Uhrzeit" feststeht, würde ich die Eingabe "17.25" ohne Zögern als 17 Uhr und 25 Minuten verstehen und verarbeiten. Anders sieht es eventuell bei einer Zeitspanne aus - die wird auch gern mal in Stunden als Dezimalbruch angegeben, anstatt sexagesimal.

        So long,
         Martin

        --
        Computer lösen für uns Probleme, die wir ohne sie gar nicht hätten.
        1. Hi!

          es ist sehr untypisch.

          Industriezeit ist schätzungsweise ungefähr so untypisch wie ein Unternehmen, das Angestelle/Lohnempfänger beschäftigt.

          --
          "Die Diebesgilde beklagte sich darueber, dass Mumm in aller Oeffentlichkeit behauptet hatte, hinter den meisten Diebstaehlen steckten Diebe."
                - T. Pratchett
          1. Hallo,

            »» es ist sehr untypisch.
            Industriezeit

            der Begriff ist mir noch nie begegnet, ich musste erstmal recherchieren, was dahintersteckt.

            ist schätzungsweise ungefähr so untypisch wie ein Unternehmen, das Angestelle/Lohnempfänger beschäftigt.

            Nein, viel untypischer. Ich kenne kein Unternehmen persönlich, das so rechnet - jedenfalls nicht für Uhrzeitangaben. Für Zeiträume (also den zeitlichen Abstand zwischen zwei Uhrzeiten) dagegen schon. Das hatte ich aber schon eingeräumt.

            So long,
             Martin

            --
            Einer aktuellen Erhebung zufolge sind zehn von neun Ehefrauen eifersüchtig auf ihren Mann.
  2. Hi,

    Es ist mir fast schon peinlich bei einem so trivialen Problem zu fragen

    och, so trivial ist die Frage gar nicht! :-)

    Ich habe ein input-Feld, welches ich bei onChange auf einen korrekten Wert prüfe. Falls der Wert nicht valid ist, soll der Fokus wieder auf dasselbe Feld gesetzt werden.

    Und da spielen manche Browser nicht mit. Und das ist auch nicht verwunderlich - denn wenn dein Vorhaben funktionieren würde, könnte ich auf dieser Seite nicht einmal die Eingabe abbrechen oder verwerfen, solange ich nicht einen gültigen Wert eingegeben habe.

    Kassiererin: Halt, Sie dürfen hier nicht raus! Sie müssen erst bezahlen!
    Kunde:       Aber ich habe nichts zu bezahlen, ich habe nicht gefunden, was ich suchte.
    Kassiererin: Egal! Hier kommt niemand raus, ohne zu bezahlen.
    Kunde:       Aber ich will doch gar nichts kaufen!
    Kassiererin: Das spielt keine Rolle. Wer hier raus will, muss bezahlen!

    Zugegeben, nicht alles was hinkt, ist ein Vergleich. Aber genau dieses Szenario ging mir durch den Kopf, als ich deine Beschreibung gelesen habe.

    So long,
     Martin

    --
    Wenn man sieht, was der liebe Gott auf der Erde so alles zulässt, hat man das Gefühl, er experimentiert immer noch.
      (Sir Peter Ustinov, Charakterdarsteller, 2004 verstorben)
  3. Was mache ich da Falsch?

    Nichts (Naja, ausser dem völig überflüssigen 'javascript:' Sprunglabel im Eventhandler).  Ich vermute du benutzt Firefox und der hat einen onfocus bug.

    Struppi.