Как я выяснил, вы не можете использовать любое из событий onkeydown
, onkeypress
или onkeyup
для полного решения, включая мобильные браузеры.Кстати, onkeypress
устарела и больше не присутствует в Chrome / Opera для Android (см .: События пользовательского интерфейса W3C Working Draft, 04 августа 2016 ).
Я нашел решение, используя только событие oninput
.Возможно, вам придется выполнить дополнительную проверку числа, если это необходимо, например, знак минус / положительный знак или разделитель десятичных знаков и тысяч и т. П., Но для начала должно быть достаточно следующего:
function checkMaxLength(event) {
// Prepare to restore the previous value.
if (this.oldValue === undefined) {
this.oldValue = this.defaultValue;
}
if (this.value.length > this.maxLength) {
// Set back to the previous value.
this.value = oldVal;
}
else {
// Store the previous value.
this.oldValue = this.value;
// Make additional checks for +/- or ./, etc.
// Also consider to combine 'maxlength'
// with 'min' and 'max' to prevent wrong submits.
}
}
Я бы также порекомендовал объединить maxlength
с min
и max
, чтобы предотвратить неправильные отправки, как указано выше несколько раз.