Domanda

Ho un input che l'utente digita un parametro di ricerca in, al momento ho su keyup per fare una richiesta POST Ajax ad uno script PHP che restituisce i risultati della ricerca. tuttavia il suo tiro fuori 50 miliardi di euro (non letteralmente) le richieste POST in circa 10 secondi (come l'utente) che rallenta l'intera esperienza giù. Posso usare jQuery per rilevare un "wordup" piuttosto che "KeyUp" rilevando l'uso della barra spaziatrice?

Ha senso?

È stato utile?

Soluzione

Sto aggiungendo questo come una risposta separata, perché è completamente diverso per la mia prima risposta.

$('#yourinput').keyup(function(){
    var input = this,
        timer = $.data(this, 'timer'),
        lastrequest = $.data(this, 'lastrequest');

    if (timer) { // if there is a keyup timeout still pending, cancel it
        clearTimeout(timer);
        $.data(this, 'timer', 0);
    }

    if (lastrequest) { // if there is an AJAX request still running, abort it
        lastrequest.abort();
        $.data(this, 'lastrequest', false);
    }

    timer = setTimeout(function(){
        lastrequest = $.post({ // or whatever your AJAX call is...
            url: 'yourfile',
            data: { search: input.value },
            success: function(response){
                lastrequest = false;
                // handle response here
            }
        });
        $.data(input, 'lastrequest', lastrequest);
    }, 500);
    $.data(this, 'timer', timer);
});

Altri suggerimenti

$('#yourinput').keyup(function(e) {
    if (e.which == 32) { // space key pressed
        // do your AJAX here
    }
});

event.which per ulteriori informazioni su questa funzione.

È certamente possibile; si rilevano gli eventi KeyUp a livello locale e verificare la presenza di spazio.

Ma si ottiene molto di più di leva se si può escogitare per ottenere tutti i risultati di ricerca che corrispondono a un prefisso e inviarli verso il basso per il javascript in una struttura dati. Date un'occhiata a "alberi di ricerca digitale" (noto anche come "cerca") per i dettagli.

Si potrebbe usare qualcosa come un ritardo per quando l'utente ha smesso di tipizzazione per un determinato periodo di tempo?

Forse qualcosa di simile? Si potrebbe aggiungere la funzione aggiuntiva di innescare un premere la barra spaziatrice pure. (Questo è stato utilizzato solo per un Google-Style insta-search, quindi può / non può aiuto).

$('#Search').keyup(function (event) 
        {
            delay(function(){

            var textboxValue = $('#Search').val();

            if( textboxValue.length >= 2)
            {
              //Perform search
            }

        });
});

var delay = (function(){
var timer = 0;
    return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
};
})();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top