Как отложить выполнение функции Javascript после вызова события Live Keyup? - PullRequest
5 голосов
/ 29 мая 2011

Привет, программисты, я удалил все из своей функции ниже, чтобы точно указать, что именно мне нужно помочь с ...

После вызова события keyup функция reloadContent выполнит ajax-вызов для сбора новых данных из базы данных.

Единственная проблема в том, что мои серверы перегружены, потому что нет никаких задержек от событий keyup, после каждого keyup вызывается функция.

Мне нужен способ отложить, скажем, 1 секунду до вызова функции reloadContent. Таким образом, он не будет выполняться 4 раза (когда пользователь печатает в j oh n), а только 1 раз после того, как пользователь вводит (john), при условии, что он может набирать более 1 символа / сек.

$('#searchinput').live('keyup',function() {

        reloadContent(); //execute load function

});

Любой совет приветствуется

Ответы [ 2 ]

6 голосов
/ 29 мая 2011

Вы можете установить тайм-аут в своем обработчике keyup и использовать функцию jQuery data () , чтобы связать его идентификатор с элементом. Таким образом, если событие keyup запускается снова до истечения задержки, вы можете очистить существующее время ожидания и запланировать новое:

$("#searchinput").live("keyup", function() {
    var $this = $(this);
    var timerId = $this.data("timerId");
    if (timerId) {
        window.clearTimeout(timerId);
    }
    $this.data("timerId", window.setTimeout(reloadContent, 1000));
});
1 голос
/ 29 мая 2011
$('#searchinput').live('keyup',function() {
    window.setTimeout(function(){
        reloadContent(); //execute load function
    },1000);
});

Это сделает задержку, но я думаю, что вам нужно не только задержка, чтобы сделать то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...