Проверка jQuery на wordchange, а не триггер «изменения» - PullRequest
0 голосов
/ 10 января 2011

У меня есть вход, в который пользователь вводит параметр поиска, в тот момент, когда он у меня включен, для выполнения ajax-запроса POST к PHP-скрипту, который возвращает результаты поиска. однако его отправка 50 миллиардов (не буквально) почтовых запросов за 10 секунд (по мере ввода пользователя), что замедляет весь процесс. Могу ли я использовать jQuery для обнаружения «wordup», а не «keyup», обнаруживая использование пробела?

Имеет ли это смысл?

Ответы [ 4 ]

5 голосов
/ 10 января 2011

Я добавляю это как отдельный ответ, потому что он полностью отличается от моего первого ответа.

$('#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);
});
2 голосов
/ 10 января 2011
$('#yourinput').keyup(function(e) {
    if (e.which == 32) { // space key pressed
        // do your AJAX here
    }
});

См. event.which для получения дополнительной информации об этой функции.

1 голос
/ 10 января 2011

Вы, конечно, могли бы;вы обнаруживаете события keyup локально и проверяете их на наличие места.

Но вы получите гораздо больше рычагов, если сможете ухитриться получить все результаты поиска, которые соответствуют префиксу, и отправить их в javascript в видеструктура данных.Посмотрите на «деревья цифрового поиска» (также известный как «попытки») для деталей.

1 голос
/ 10 января 2011

Вы могли бы использовать что-то вроде задержки, когда пользователь прекратил печатать на определенный период времени?

Возможно, что-то подобное? Вы можете добавить дополнительную функцию для запуска нажатия клавиши пробела. (Это использовалось только для insta-поиска в стиле Google, поэтому может / не может помочь).

$('#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);
};
})();
...