No estoy seguro de lo que estoy haciendo mal. Las letras todavía se muestran en la entrada.
<script> let value = ""; function isNumber(value) { return !isNaN(value); } function handleInput(e) { let oldValue = value; let newValue = e.target.value; console.log(oldValue, newValue, "isNumber", isNumber(newValue)); if (isNumber(newValue) && newValue.length < 17) { value = newValue; } else { value = oldValue; } } </script> <div class="container"> <input {value} on:input|preventDefault={handleInput} /> </div>Aquí está el REPL también.
podrías hacer esto:
else { e.target.value = oldValue; }