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()"/>
È stato utile?

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
scroll top