Избегайте множественных вызовов автозаполнения, заключив их в SetTimeOut - PullRequest
1 голос
/ 03 мая 2010

Вот моя проблема: используя плагин jQuery для автозаполнения, я бы хотел избежать множественных ajax-запросов, когда пользователь нажимает свой ключ, окружая

$('#query1').autocomplete({
                    serviceUrl:'/actions/autocomplete?population=salon',
                    minChars:3, 
                    maxHeight:300,
                    width:200,
                    clearCache:true,
                    onSelect: function(suggestions,data){ $(".btn1").attr("href", "${pageContext.request.contextPath}/actions/espaceClients?participantId=" + data) }
                });

с чем-то вроде

                var search = false;
            $('#query1, #query2, #query3').keyup(function(){
                if (!search){
                    search = true;
                }
                if (search) {
                    search = false;
                    autocompleteThem();
                }
            });

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

Говоря простыми словами, если пользователь не вводит ничего другого в течение определенного периода времени, вы можете вызвать автозаполнение.

Надеюсь, я в порядке, потому что мои мозги в беспорядке ...

Ответы [ 2 ]

4 голосов
/ 03 мая 2010

Используйте параметр deferRequestBy для этого плагина, например:

$('#query1').autocomplete({
                serviceUrl:'/actions/autocomplete?population=salon',
                minChars:3, 
                maxHeight:300,
                width:200,
                clearCache:true,
                deferRequestBy: 200, //200ms
                onSelect: function(suggestions,data){ $(".btn1").attr("href", "${pageContext.request.contextPath}/actions/espaceClients?participantId=" + data) }
            });
3 голосов
/ 03 мая 2010

Вы действительно хотите предотвратить множественные одновременные запросы? Это будет препятствовать полезности этого плагина. Вы можете добавить задержку к запросу или использовать плагин, такой как AjaxQueue , чтобы результаты возвращались в браузер в правильном порядке.

Для использования встроенного параметра delay (из руководства):

Задержка в миллисекундах Автозаполнение ожидает после нажатия клавиши активировать себя. Нулевая задержка составляет смысл для локальных данных (больше отзывчивый), но может произвести много загрузить для удаленных данных, будучи меньше отзывчивый.

Инициализировать автозаполнение с указанным параметром задержки.

$( ".selector" ).autocomplete({ delay: 0 });

Получить или установить параметр задержки после инициализации.

//getter
var delay = $( ".selector" ).autocomplete( "option", "delay" );
//setter
$( ".selector" ).autocomplete( "option", "delay", 0 );

Эквивалент параметра задержки для плагина , который вы используете , равен

deferRequestBy
...