Domanda

Ecco il mio codice:          

function search_buddy() 
{
    $.post("num.php",function (ret){
        num=ret;
    });
    $("#Layer7").html(num);
}
</script>

<div id="Layer8">
     Find a buddy : 
    <input type="text" id="search" onkeyup="search_buddy()"/>&nbsp;:
</div>

Ora, quando entro un carattere nella casella di testo con id = cercare, la funzione search_buddy non sembra ottenere innescato. Considerando che, se entro due caratteri o più, la funzione lavora perfectly.Why sta succedendo questo?

È stato utile?

Soluzione

miglior risorsa su eventi DOM: http://www.quirksmode.org/dom/ eventi / keys.html

Sembra che il tuo gestore di eventi fuochi "search_buddy" una richiesta AJAX, che è asincrona. Il resto delle piste funzione in parallelo con la richiesta AJAX, in modo da "numero" non è definito prima che i rendimenti $ .post.

// num is undefined here... unless your network has 0 latency
$("#Layer7").html(num);

È necessario racchiudere il codice (incollato sopra) in una funzione di callback. Sembra essere il parametro numero 3: http://api.jquery.com/jQuery.post/

Non testato, ma ipotesi migliore:

function search_buddy() {
    $.post("num.php", function (ret) {
        num=ret;
        $("#Layer7").html(num);
    });
}

Ecco alcune modifiche che aiuta a capire:

function search_buddy() {
    alert("before the $.post execution");
    $.post("num.php", function (ret) {
        num=ret;
        $("#Layer7").html(num);
        alert("$.post callback");
    });
    alert("immediately after the $.post execution");
}

Nota:. "Segnalazione" si fermerà tutta l'elaborazione JavaScript in modo da essere in grado di vedere ciò che si verifica un evento quando

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top