Das Problem mit type="number"
und min="1"
ist, dass es erlaubt, das Zeichen -
, das Zeichen e
und das Zeichen +
zu tippen oder einzufügen.
Das Problem mit Math.abs(value)
ist, dass es die gesamte eingegebene Zahl durch 0
ersetzt, was wir nicht wollen und sehr frustrierend ist.
Das e.keyCode
ist sehr schwer lesbar und veraltet.
Die reine HTML-Methode funktioniert in diesem Fall nicht, du musst JavaScript verwenden.
Entferne den type="number"
und mache dies:
function inputNumberAbs() {
var input = document.getElementsByTagName("input")[0];
var val = input.value;
val = val.replace(/^0+|[^\d.]/g, '');
input.value = val;
}
Regex-Erklärung:
^0+
entfernt alle 0er am Anfang
|
Oder-Operator
[^\d.]
entfernt alles, was ^
(NICHT) eine \d
(ZAHL) oder ein .
(PUNKT) ist
Dies verhindert, dass der Benutzer irgendwelche nicht definierten Zeichen wie e, -, +,
und alle anderen Zeichen, die keine Zahlen sind, eingibt oder einfügt.
Wenn du keine Dezimalzahlen benötigst, entferne einfach den .
aus dem Regex.