I have following input field code snippet from here I am calling AngularJS $scope
method in the following way
<input class="search-txt-input"
id="partner_name"
name="partner_name"
title="Partner Name"
type="text"
autocomplete="off"
ng-model="selectedPartner"
typeahead="partner as partner.name for partner in retrievePartnerList($viewValue)"
typeahead-items="2"
typeahead-min-length="3">
So when I type a minimum of 3 characters in the text field, it will fire an AJAX call to to retrievePartnerList
function.
Also my server response is very slow, so for 10 characters 7 Ajax calls comes in queue and after some time I am getting a TimeOutError.
So to solve this I am trying to find a way using which I can delay the call to retrievePartnerList()
method, so that less AJAX calls will be sent and it probably reduce the burden to my server.
So I am not sure how I can use setTimeout()
function here.
Let me know if any one of you have any idea on this.
Yes, you can easily delay firing off matching by specifing the typeahead-wait-ms
attribute. As the name of the attribute implies, it takes a value in milliseconds and will delay matching , waiting specified number of milliseconds after user stopped typing before firing requests to the server.
Here is a demo showing this in action: http://plnkr.co/edit/fHLqDx?p=preview
Check AngularStrap
solution: https://github.com/mgcrea/angular-strap/blob/master/src/directives/typeahead.js
OR
It can be easily done like this in javascript:
var autocomplete = $('#searchinput').typeahead().on('keyup', delayRequest);
function dataRequest() {
// api request here
}
function delayRequest(event) {
if(delayRequest.timeout) {
clearTimeout(delayRequest.timeout);
}
var target = this;
delayRequest.timeout = setTimeout(function() {
dataRequest.call(target, event);
}, 200); // 200ms delay
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With