Perché devo premere due volte il tasto?
-
23-10-2019 - |
Domanda
Sto facendo un po 'di JS gioco e sto cercando di fare l'input dell'utente controllare al più presto, in modo da sto usando la funzione onKeyDown. Il problema è, se la risposta è 5, devo premere 5, quindi premere nuovamente 5 per poter riconoscere l'input dell'utente, perché sta succedendo questo?
var btn=0
var num=""
var digits=1
function quickanswer(){
if (document.getElementById("autocheck").checked==true&&document.getElementById("txt").value.length==digits){
document.getElementById("dots").innerHTML = ""
createdots()
document.getElementById("txt").value=""
document.getElementById("txt").focus()
document.getElementById("txt").style.color = "#000000"
}
}
function submitenter(){
var keycode = window.event.keyCode;
if (keycode == 13)
{
btnclick();
}
if (keycode < 47 || keycode > 58){
return false;}
}
<input id="txt" type="text" onKeyPress="return submitenter()" onKeyDown="quickanswer()"/>
Soluzione
L'evento onKeyDown
accade prima il carattere viene effettivamente aggiunto alla casella di testo.
Per catturare invece il nuovo evento onkeyup
utilizzo carattere.
In ogni caso, il codice non è al momento cross browser .. window.event
non è standard invece passare l'evento come argomento della funzione in questo modo:
onKeyPress="return submitenter(event)"
Poi nella funzione:
function submitenter(evt){
//IE fix
if (typeof evt == "undefined")
evt = window.event;
var keycode = evt.keyCode || evt.which;
...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow