Могу ли я отложить событие keyup для jquery?

Я использую API фильмов Rottentomatoes в сочетании с плагином twitter typeahead с помощью bootstrap 2.0. Мне удалось интегрировать API, но проблема, с которой я столкнулся, заключается в том, что после каждого события keyup вызывается API. Это все прекрасно и модно, но я бы предпочел позвонить после небольшой паузы, позволяющей пользователю сначала ввести несколько символов.

Вот мой текущий код, который вызывает API после нажатия клавиши:

    var autocomplete = $('#searchinput').typeahead()
    .on('keyup', function(ev){

        ev.stopPropagation();
        ev.preventDefault();

        //filter out up/down, tab, enter, and escape keys
        if( $.inArray(ev.keyCode,[40,38,9,13,27]) === -1 ){

            var self = $(this);

            //set typeahead source to empty
            self.data('typeahead').source = [];

            //active used so we aren't triggering duplicate keyup events
            if( !self.data('active') && self.val().length > 0){

                self.data('active', true);

                //Do data request. Insert your own API logic here.
                $.getJSON("http://api.rottentomatoes.com/api/public/v1.0/movies.json?callback=?&apikey=MY_API_KEY&page_limit=5",{
                    q: encodeURI($(this).val())
                }, function(data) {

                    //set this to true when your callback executes
                    self.data('active',true);

                    //Filter out your own parameters. Populate them into an array, since this is what typeahead's source requires
                    var arr = [],
                        i=0;

                    var movies = data.movies;

                     $.each(movies, function(index, movie) {
                        arr[i] = movie.title
                        i++;
                     });

                    //set your results into the typehead's source 
                    self.data('typeahead').source = arr;

                    //trigger keyup on the typeahead to make it search
                    self.trigger('keyup');

                    //All done, set to false to prepare for the next remote query.
                    self.data('active', false);

                });

            }
        }
    });

Можно ли установить небольшую задержку и избежать вызова API после каждого нажатия клавиши?

11
задан Paul 1 April 2012 в 17:11
поделиться