Mief: Nur Zahlen eingeben.

Hallo,
ich schreibe im Moment ein Javascript, das Bauch-Befehle generiert. Ich bin jetzt im feintuning und habe ein Textfeld für eine Zeitangabe. In das Feld dürfen nur Zahlen rein. Wie kann ich verhindern das überhaupt Buchstaben darin erscheinen wenn der User einen Buchstaben/Punkt/Komma/Sonstige Zeichen angibt?
Da das ganze Script auf JS basiert, kann man vernachlässigen, das es auch deaktiviert werden kann.
Danke schonmal im voraus.

  1. Wie kann ich verhindern das überhaupt Buchstaben darin erscheinen wenn der User einen Buchstaben/Punkt/Komma/Sonstige Zeichen angibt?

    Du kannst das Ereignis onkeyup nutzen, um nach jedem Tastendruck den Inhalt des Feldes zu lesen. Alles, was keine Ziffer ist, löscht du und schreibst den Rest zurück.
    Die letzte Stelle anzuschauen reicht nicht, mit der Maus könnte ja eine andere Position zur Eingabe angeklickt werden.

    1. Da fällt mir gerade ein, dass man per cut and paste einen String mit der Maus einschieben kann. Also auch auf onmouseup (heisst das so? - ist jetzt aus dem Gedächtnis) anspringen.

    2. Moin!

      Wie waere es denn mit onchange?

      --
      Signaturen sind blöd!
      1. Hallo,

        Wie waere es denn mit onchange?

        für die Aufgabenstellung auch nicht optimal, denn onchange löst erst aus, wenn das Eingabefeld den Focus verliert und bis dahin eine Änderung stattgefunden hat.

        Ciao,
         Martin

        --
        Wer es in einem Unternehmen zu etwas bringen will, muss so tun, als hätte er es schon zu etwas gebracht.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. Hi!

          Wie waere es denn mit onchange?

          für die Aufgabenstellung auch nicht optimal, denn onchange löst erst aus, wenn das Eingabefeld den Focus verliert und bis dahin eine Änderung stattgefunden hat.

          Stimmt. Es sollten gar keine Buchstaben angezeigt werden.

          --
          Signaturen sind blöd!
          1. Hi,
            es ist sehr interessant, was alles so geschrieben wird, wenn man nicht zurückschreibt.
            Aber jetzt zurück zum Thema:
            Dass das mit den Eventhandlern geht, das weiß ich. Aber eigentlich wollte ich wissen, wie der dazugehörige Code dazu aussehen sollte. :)

            1. @@Mief:

              nuqneH

              Aber eigentlich wollte ich wissen, wie der dazugehörige Code dazu aussehen sollte. :)

              http://de.selfhtml.org/perl/sprache/regexpr.htm#flags@title=Alle Zeichen, die <http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichen@title=keine Ziffern> sind, durch nichts http://de.selfhtml.org/javascript/objekte/string.htm#replace@title=ersetzen.

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
    3. Wie kann ich verhindern das überhaupt Buchstaben darin erscheinen wenn der User einen Buchstaben/Punkt/Komma/Sonstige Zeichen angibt?
      Du kannst das Ereignis onkeyup nutzen, um nach jedem Tastendruck den Inhalt des Feldes zu lesen. Alles, was keine Ziffer ist, löscht du und schreibst den Rest zurück.

      Man kann auch einfach die Standardaktion unterdrücken und damit verhindern, dass das Zeichen überhaupt erst ins Feld kommt.

      Allerdings muss man dafür das keypress-Ereignis überwachen und dabei preventDefault aufrufen, soweit ich mich erinnere.

      Mathias

  2. Ich finde solche Ideen inzwischen nicht mehr sinnvoll. Der Benutzer weiß nicht warum nichts passiert, wenn er irgendwas eingibt.
    Dann bring lieber eine Meldung dass die Eingabe so nicht passt, aber lass sie ihn selber korrigieren.

    1. [latex]Mae  govannen![/latex]

      Ich finde solche Ideen inzwischen nicht mehr sinnvoll. Der Benutzer weiß nicht warum nichts passiert, wenn er irgendwas eingibt.
      Dann bring lieber eine Meldung dass die Eingabe so nicht passt, aber lass sie ihn selber korrigieren.

      Dies entspricht genau meiner Meinung. Wenn man bei einer Eingabe nicht genehme Tasten blockt, verwirrt das, weil augenscheinlich nichts passiert.

      Besser ist es, beim Beenden der Eingabe (Verlassen des Feldes oder bei submit, falls es ein Formular ist) zu testen{1} und entsprechende Fehlermeldung ausgeben.

      {1} hier beispielsweise mit einer regExp /^[0-9]+$/ (für Ganzzahlen) und .test()

      Stur lächeln und winken, Männer!
      Kai

      --
      It all began when I went on a tour, hoping to find some furniture
       Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
      SelfHTML-Forum-Stylesheet
      1. Hi!

        Recht habt ihr. Aber: Was machst Du wenn Du das nicht darfst? Ich hatte so einen Fall.
        "Die Leute duerfen nur Zahlen in das Feld eingeben."
        "Kein Problem. Ich pruefe dann einfach die Eingaben, wenn sie an den Server abgeschickt wurden und gebe dann eine Fehlermeldung aus."
        "Nein. Die Leute duerfen das gar nicht erst eingeben koennen!"
        ...
        Die daruf folgende Diskussion ergab, jenseits aller vernuenftigen Argumente, dass alle Eingaben gefaelligst sofort zu uberpruefen sind und keinesfalls serverseitig.

        Was soll man da machen? Kuendigen waere ne Option, vor allem weil dann irgendwann einen doch alles einholt und man hier und da nochmal irgendwelche neue Idenn einbauen muss und einem dann noch vorgehalten wird, man wuerde sich nicht an abgesprochene Zeitplaene halten... Manchmal hasse ich den Job.

        --
        Signaturen sind blöd!
        1. [latex]Mae  govannen![/latex]

          Recht habt ihr. Aber: Was machst Du wenn Du das nicht darfst? Ich hatte so einen Fall.
          "Die Leute duerfen nur Zahlen in das Feld eingeben."
          "Kein Problem. Ich pruefe dann einfach die Eingaben, wenn sie an den Server abgeschickt wurden und gebe dann eine Fehlermeldung aus."
          "Nein. Die Leute duerfen das gar nicht erst eingeben koennen!"
          ...
          Die daruf folgende Diskussion ergab, jenseits aller vernuenftigen Argumente, dass alle Eingaben gefaelligst sofort zu uberpruefen sind und keinesfalls serverseitig.

          Der Kunde ist leider König. Dann muß man es halt so machen.
          Dem Inputfeld eines der key*-Events zuweisen (ggf. noch Andere) und in der aufgerufenen Funktion testen, ob die gedrückte Taste ins Schema passt.

          Das ist allerdings nicht annähernd so trivial, wie es sich anhört, denn man will schließlich noch eine Fehleingabe löschen können und auch innerhalb des Feldes den Cursor bewegen können. Außerdem will man auch nach der Eingabe aus dem Feld herausspringen können. Somit sind *mindestens* noch DEL, Backspace, Cursor links, Cursor rechts, TAB zu beachten bzw. nicht zu blocken. Und schon hat man ein Problem, weil Tastencodes auf verschiedenen Systemen unterschiedliche Werte liefern können... (ob das bei den oben genannten so wäre, kann ich aus dem Stegreif nicht sagen, das müßte man nachschlagen).

          Was soll man da machen? Kuendigen waere ne Option, vor allem weil dann irgendwann einen doch alles einholt und man hier und da nochmal irgendwelche neue Idenn einbauen muss und einem dann noch vorgehalten wird, man wuerde sich nicht an abgesprochene Zeitplaene halten... Manchmal hasse ich den Job.

          *g* Ich weiß schon, weshalb ich mir sowas nicht aufhalse.

          Stur lächeln und winken, Männer!
          Kai

          --
          It all began when I went on a tour, hoping to find some furniture
           Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
          SelfHTML-Forum-Stylesheet
          1. Hoi!

            Der Kunde ist leider König. Dann muß man es halt so machen.

            Jain. Der "Kunde" hier war ein Supervisor meiner Firma.

            --
            Signaturen sind blöd!
          2. @@Kai345:

            nuqneH

            […] testen, ob die gedrückte Taste ins Schema passt.

            Da finde ich Gasts Ansatz sinnvoller.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
        2. Recht habt ihr. Aber: Was machst Du wenn Du das nicht darfst?

          Schriftlich (per Mail) drauf hinweisen dass man ausdrücklich davon abrät, weil sowas einen schlechten Eindruck machen kann. Auf die Folgen hinweisen, auf eine schriftliche Antwort drängen und das ganze dann zur Dokumentation packen.

          weil dann irgendwann einen doch alles einholt und man hier und da nochmal irgendwelche neue Idenn einbauen muss und einem dann noch vorgehalten wird, man wuerde sich nicht an abgesprochene Zeitplaene halten...

          Wissen wo man hin greifen muss um die Sachen schnell auf den Tisch legen zu können.

          1. Moin!

            Recht habt ihr. Aber: Was machst Du wenn Du das nicht darfst?
            Schriftlich (per Mail) drauf hinweisen dass man ausdrücklich davon abrät, weil sowas einen schlechten Eindruck machen kann. Auf die Folgen hinweisen, auf eine schriftliche Antwort drängen und das ganze dann zur Dokumentation packen.

            weil dann irgendwann einen doch alles einholt und man hier und da nochmal irgendwelche neue Idenn einbauen muss und einem dann noch vorgehalten wird, man wuerde sich nicht an abgesprochene Zeitplaene halten...
            Wissen wo man hin greifen muss um die Sachen schnell auf den Tisch legen zu können.

            Ja. Deine Antworten sind vernuenftig und nachvollziehbar. Allerdings wuerde ich dann niemals anfangen irgendwas zu schreiben. Sowas wie ein Pflichten heft haette ich schon lange gern mal eingefuehrt. Aber man bekommt die Jungs ja nichtmal dazu die eben am Telefon verlangte Entfernung eines Inputfeldes in einem kurzen Satz nochmal per Mail zu schicken.

            Wo findet man denn bloss Chefs, die nicht erstmal hinter einem stehen nach dem Motto: "Ich bin dein Boss, mach das jetzt!" und spaeter "Warum hast Du son Mist gemacht?"?? Mein letzter war da ganz gross. Hier bei einer Logistikfirma, ist nicht ganz so schliimm, aber mein Chef vergisst auch gern mal was. Und hat selbst mit diesem Problem bei seinen Vorgesetzten zu kaempfen...

            Ich hab mir mittlerweile angewoehnt, teilweise selbst den Leuten Mails zu schreiben. "Hallo, wie telefonisch besprochen werde ich nun das Inputfeld fuer Feederfehler entfernen und die Reports entsprechend abaendern." Das macht man aber nicht immer und bei jedem Furz.

            --
            Signaturen sind blöd!
  3. Hi,

    In das Feld dürfen nur Zahlen rein. Wie kann ich verhindern das überhaupt Buchstaben darin erscheinen wenn der User einen Buchstaben/Punkt/Komma/Sonstige Zeichen angibt?

    im Gegensatz zu den anderen behaupte ich mal, dass die User sich daran gewöhnen werden, wenn missliebige Buchstaben nicht erscheinen.
    Als ersten Punkt empfehle ich dir (falls du dein Dokument als HTML5 auszeichnest), dass Textfeld mit type='number' auszuzeichnen, diverse Browser verhindern nicht-numerische Zeichen damit automatisch (ohne weiteres Zutun deinerseits mit JS).

    Sobald sich das bei den Browsern und bei Webentwicklern weiter durchsetzt, werden die User das häufiger sehen und es wird als "normal" empfunden werden.

    Bis die Tage,
    Matti

    1. @@Matti Mäkitalo:

      nuqneH

      […] Textfeld mit type='number' auszuzeichnen, diverse Browser verhindern nicht-numerische Zeichen damit automatisch

      ?? Welche sollen das sein? Mobile?

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hi,

        […] Textfeld mit type='number' auszuzeichnen, diverse Browser verhindern nicht-numerische Zeichen damit automatisch
        ?? Welche sollen das sein? Mobile?

        args, das war wohl eine Fehleinschätzung.
        Ich hatte das Verhalten in Chrome gesehen, als ich ein input mit @type='date' ausgezeichnet hatte und gleichzeitig den jQuery-Datepicker genutzt. Und da war ein Eingeben von Buchstaben nicht möglich. Daraus zog ich den (voreiligen) Schluss, dass das am Typ des Eingabefeld lag.

        Nun beim Testen von dem, was ich gesagt habe, sehe ich, dass die Nicht-Zahlen (oder gültige Zeichen in Zahldarstellungen, nach meinen kurzen Tests in Chrome das E) erst bei der Validierung entfernt werden.

        Bei Mobil-Browsern sollte man dadurch immerhin erreichen, dass die Zahl-Tastatur eingeblendet wird und hat dadurch eine nicht-strikte Hürde (der User muss erst auf die normale Buchstaben-Tastatur wechseln, um Buchstaben einzugeben).

        Bis die Tage,
        Matti

    2. Moin!

      In das Feld dürfen nur Zahlen rein. Wie kann ich verhindern das überhaupt Buchstaben darin erscheinen wenn der User einen Buchstaben/Punkt/Komma/Sonstige Zeichen angibt?

      im Gegensatz zu den anderen behaupte ich mal, dass die User sich daran gewöhnen werden, wenn missliebige Buchstaben nicht erscheinen.

      Das denke ich allerdings auch. Je nach Logik stoert das nicht. Wenn man z.b. eintragen muss, wieviele Mitarbeiter heute gearbeitet haben, dann wird man sich wahrscheinlich nicht dran stoeren, dass man nur Zahlen eingeben kann.

      --
      Signaturen sind blöd!
    3. @@Matti Mäkitalo:

      nuqneH

      im Gegensatz zu den anderen behaupte ich mal, dass die User sich daran gewöhnen werden, wenn missliebige Buchstaben nicht erscheinen.

      Diese Information könnte man ihm auch im UI geben, bspw. @placeholder="nur Ziffern erlaubt".

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)