Tôi đang sử dụng API phim rottentomatoes kết hợp với plugin typeahead của twitter bằng cách sử dụng bootstrap 2.0. Tôi đã có thể tích hợp API nhưng vấn đề tôi gặp phải là sau mỗi sự kiện keyup API được gọi. Điều này là tất cả tốt và dandy nhưng tôi thà thực hiện cuộc gọi sau một tạm dừng nhỏ cho phép người dùng gõ một số ký tự đầu tiên.Tôi có thể trì hoãn sự kiện keyup cho jquery không?
Đây là mã hiện tại của tôi mà các cuộc gọi API sau một sự kiện KeyUp:
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);
});
}
}
});
Có thể thiết lập một sự chậm trễ nhỏ và tránh gọi API sau mỗi lần KeyUp?
Điều này hoạt động tốt nhưng có vẻ như bị kẹt trong một vòng lặp, thực hiện cuộc gọi đến datarequest mỗi 200 ms? – Paul
Trong mã của bạn, bạn đang kích hoạt khóa sau khi khóa: 'self.trigger ('keyup')'. Đối với việc xử lý sự kiện keyup thích hợp, bạn nên xóa 'ev.stopPropagation();' và 'self.trigger ('keyup')' –
Điều đó đã làm được điều đó ... cảm ơn! – Paul