Peter Kammerer: Formulare: Nur Zahleneingabe erlauben

Hallo Forum,

wie kann ich sicherstellen, dass in ein INPUT-Feld nur Zahlen eingegeben werden können.
Ohne Javascript, wenn möglich.

Am besten wäre, ich könnte die Eingaben als DM-Werte formatieren.

Grüsse

Peter Kammerer

  1. Hi,

    wie kann ich sicherstellen, dass in ein INPUT-Feld nur Zahlen eingegeben werden können.
    Ohne Javascript, wenn möglich.

    uff! Also: Mit reinem HTML hast Du keine Chance. Mit JavaScript kannst Du z.B. onChange prüfen, ob der Wert eine Zahl ist (sinngemäß "if (value == value*1)" müßte klappen), und andernfalls den Fokus zurück auf das Eingabefeld setzen und evtl. eine Meldung ausgeben (Vorsicht bei alert, das kann bei einem unbedarften User schnell zu einer Quasi-Endlosschleife führen).

    Am besten wäre, ich könnte die Eingaben als DM-Werte formatieren.

    Überlege Dir, wie ein DM-Wert aussieht, und formatiere/prüfe das Feld entsprechend. Bedenke, daß jeder seine ganz eigene Vorstellung von korrekter DM-Angabe hat: "10.00", "10,00", "10,--", "DM 10,-", "10 DM" usw. Wie willst Du das allgemein prüfen?

    Cheatah

    1. Hallo Cheatah

      Überlege Dir, wie ein DM-Wert aussieht, und formatiere/prüfe das Feld entsprechend. Bedenke, daß jeder seine ganz eigene Vorstellung von korrekter DM-Angabe hat: "10.00", "10,00", "10,--", "DM 10,-", "10 DM" usw. Wie willst Du das allgemein prüfen?

      Gute Frage , nächste Frage. Da hast Du recht.

      Blöde ist halt, dass ich damit rechnen muss.

      Am besten ist dann wohl ich lege die Werte in einer DB ab.

      Nun denn...

      Danke, Peter

    2. Hi Cheatah,

      Mit JavaScript kannst Du z.B. onChange prüfen, ob der Wert eine Zahl ist (sinngemäß "if (value == value*1)" müßte klappen), und andernfalls den Fokus zurück auf das Eingabefeld setzen und evtl. eine Meldung ausgeben (Vorsicht bei alert, das kann bei einem unbedarften User schnell zu einer Quasi-Endlosschleife führen).

      hänge mich mal hier dran.
      Was meinst du denn mit unbedarften Usern? Ich habe diese Probleme mit den Endlosschleifen bisher weniger bei unbedarften Usern als bei Netscape (will ja jetzt nicht "unbedarfe Browser" sagen <g>) gehabt. Mit einer Abfrage, ob das alert bereits geöffnet ist, läßt sich das umgehen. Nur unter Unix öffnet sich dann trotzdem 2x ein alert (keine Endlosschleife). Naja, das kriege ich auch schon noch hin, aber ich glaube ich versteh den Mechanismus der Event-Abarbeitung nicht ganz. Vielleicht hilft mir das mit den usern ja weiter....?

      Gruß Franz-Josef

      1. Hi,

        Mit JavaScript kannst Du z.B. onChange prüfen, ob der Wert eine Zahl ist (sinngemäß "if (value == value*1)" müßte klappen), und andernfalls den Fokus zurück auf das Eingabefeld setzen und evtl. eine Meldung ausgeben (Vorsicht bei alert, das kann bei einem unbedarften User schnell zu einer Quasi-Endlosschleife führen).

        Was meinst du denn mit unbedarften Usern?

        ich stell mir das in etwa so vor:

        Der Browser des Benutzers feuert sein onChange sofort bei der Änderung, nicht erst (wie Netscape), wenn das Feld den Fokus verliert - das als Voraussetzung. Nur gibt er z.B. "123x" ein - das "x" wird registriert, ein alert ausgegeben, der Fokus wieder ins Feld gesetzt (was für Browser notwendig ist, die eben erst onBlur auf onChange prüfen), und ausirgendwelchen Gründen landet der Cursor damit am Anfang des Eingabefeldes.

        Bis hierhin noch kein Problem. Nun drückt der unbedarfte User aber "Entf", die "1" wird gelöscht, onChange feuert, das "x" steht immer noch da, ein alert wird ausgegeben. Der Benutzer ergänzt die gelöschte "1", onChange feuert, das "x" steht immer noch da, ein alert... Und so weiter. Wenn der Benutzer also nicht _während_ der Warnmeldung ändern kann (z.B. mit prompt()), kann das ganze ziemlich unkomfortabel sein. Nicht unbedingt endlos, aber sehr nervig.

        Cheatah