Mi código html es el siguiente:
<input type="text" id="emp" onkeypress="return (event.charCode > 64 && event.charCode < 91) || (event.charCode > 96 && event.charCode < 123)" > Prohíbe la entrada de cualquier número en el campo de entrada. Ahora, quiero eliminar este evento de keypress de tecla al cumplir con una determinada condición en mi js . Así que intenté ejecutar:
if(condition) document.getElementById("emp").removeEventListener("keypress");Pero arroja un error:
TypeError no capturado: no se pudo ejecutar 'removeEventListener' en 'EventTarget': se requieren 2 argumentos, pero solo 1 presente.
¿Cómo elimino el evento?
Aquí hay una manera de hacerlo:
<input type="text" id="emp" oninput="console.log(this.value)" > <button onclick='document.querySelector("input").oninput=null'>remove event</button>El atributo de las etiquetas HTML funciona como una función frente a un detector de eventos. Para lograr lo que busca, solo necesita editar o eliminar ese atributo
if(condition) document.getElementById("emp").setAttribute("onkeypress", ""); if(condition) document.getElementById("emp").removeAttribute("onkeypress");Puedes hacerlo más fácil. En lugar de eliminar el evento, puede configurar return false si la condición es verdadera. En este ejemplo, si la longitud del valor es mayor a 3 caracteres, la condición cambiará.
// const i = document.querySelector('input'); function myF(event) { const charCode = event.keyCode; const condition = event.target.value.length < 3 ? false : true; if (condition) { console.log('condition true'); return false; } if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || charCode == 8) { return true; } else { return false; } } <input type="text" id="emp" onkeypress="return myF(event)" >