Вставить действительно сложно.Я придумал следующее:
function setValid(target) {
const val = target.value;
// Remove value, as setting the same value has no effect.
target.value = '';
// Reset value on the next tick
requestAnimationFrame(() => target.value = val);
}
<form action="#" method="post">
Numbers: <input name="num"
type="number"
min="1"
step="1"
onblur="setValid(this)"
onpaste="requestAnimationFrame( () => setValid(this) )"
onkeypress="return event.charCode >= 48 && event.charCode <= 57"
title="Numbers only">
<input type="submit">
</form>
Это означает следующее:
- Когда вход теряет фокус, он сбрасывает значение
- При вставке он ждет, пока значение не будет установлено, а затем сбрасывает его.
Возможно, есть даже лучшие решения.
Этот ответ основан на ответе kneekiздесь .