Ich habe zuerst versucht, dies mit jQuery zu lösen, aber ich war nicht glücklich darüber, dass unerwünschte Zeichen (nicht Ziffern) tatsächlich im Eingabefeld angezeigt wurden, bevor sie beim Keyup entfernt wurden.
Auf der Suche nach anderen Lösungen habe ich Folgendes gefunden:
Ganzzahlen (nicht negativ)
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
return oKeyEvent.charCode === 0 ||
/\d/.test(String.fromCharCode(oKeyEvent.charCode));
}
</script>
<form name="myForm">
<p>Enter numbers only: <input type="text" name="myInput"
onkeypress="return numbersOnly(this, event);"
onpaste="return false;" /></p>
</form>
Quelle: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onkeypress#Example
Live-Beispiel: http://jsfiddle.net/u8sZq/
Dezimalstellen (nicht negativ)
Um einen einzelnen Dezimalpunkt zuzulassen, können Sie Folgendes tun:
<script>
function numbersOnly(oToCheckField, oKeyEvent) {
var s = String.fromCharCode(oKeyEvent.charCode);
var containsDecimalPoint = /\./.test(oToCheckField.value);
return oKeyEvent.charCode === 0 || /\d/.test(s) ||
/\./.test(s) && !containsDecimalPoint;
}
</script>
Quelle: Hab das gerade geschrieben. Scheint zu funktionieren. Live-Beispiel: http://jsfiddle.net/tjBsF/
Andere Anpassungen
- Um mehr Symbole eingeben zu können, fügen Sie diese einfach dem regulären Ausdruck hinzu, der als grundlegender Zeichencodefilter fungiert.
- Um einfache kontextbezogene Einschränkungen zu implementieren, überprüfen Sie den aktuellen Inhalt (Status) des Eingabefelds (oToCheckField.value).
Einige Dinge, an denen Sie interessiert sein könnten:
- Nur ein Dezimalpunkt erlaubt
- Minuszeichen nur zulassen, wenn am Anfang der Zeichenfolge positioniert. Dies würde negative Zahlen ermöglichen.
Mängel
- Die Caret-Position ist innerhalb der Funktion nicht verfügbar. Dies hat die kontextbezogenen Einschränkungen, die Sie implementieren können, erheblich reduziert (z. B. keine zwei gleichen aufeinanderfolgenden Symbole). Ich bin mir nicht sicher, wie ich am besten darauf zugreifen kann.
Ich weiß, dass der Titel nach jQuery-Lösungen fragt, aber hoffentlich findet jemand dies trotzdem nützlich.