summaryrefslogtreecommitdiffstats
path: root/askbot/media/js/utils.js
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-04-04 00:09:15 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-04-04 00:09:15 -0400
commit70225986558be947cad393192bd1c8efee054673 (patch)
treedc3086495613795ae015ded10b3cdf9f01c05893 /askbot/media/js/utils.js
parentdbddb20b09b327e23161cf512f0149d4972cf277 (diff)
downloadaskbot-70225986558be947cad393192bd1c8efee054673.tar.gz
askbot-70225986558be947cad393192bd1c8efee054673.tar.bz2
askbot-70225986558be947cad393192bd1c8efee054673.zip
tweaked autocompleter to prevent launching new search when previous did not return
Diffstat (limited to 'askbot/media/js/utils.js')
-rw-r--r--askbot/media/js/utils.js26
1 files changed, 22 insertions, 4 deletions
diff --git a/askbot/media/js/utils.js b/askbot/media/js/utils.js
index ef3b3e2c..173bc8f8 100644
--- a/askbot/media/js/utils.js
+++ b/askbot/media/js/utils.js
@@ -2225,6 +2225,8 @@ var AutoCompleter = function(options) {
*/
this.finishOnBlur_ = true;
+ this._isRunning = false;
+
this.options.minChars = parseInt(this.options.minChars, 10);
if (isNaN(this.options.minChars) || this.options.minChars < 1) {
this.options.minChars = 2;
@@ -2466,11 +2468,17 @@ AutoCompleter.prototype.activateNow = function() {
}
};
+AutoCompleter.prototype.setIsRunning = function(isRunning) {
+ this._isRunning = isRunning;
+};
+
AutoCompleter.prototype.fetchData = function(value) {
var self = this;
- this.fetchRemoteData(value, function(remoteData) {
- self.filterAndShowResults(remoteData, value);
- });
+ if (this._isRunning === false) {
+ this.fetchRemoteData(value, function(remoteData) {
+ self.filterAndShowResults(remoteData, value);
+ });
+ }
};
AutoCompleter.prototype.fetchRemoteData = function(filter, callback) {
@@ -2496,11 +2504,21 @@ AutoCompleter.prototype.fetchRemoteData = function(filter, callback) {
};
$.ajax({
url: this.makeUrl(filter),
- success: ajaxCallback,
+ success: function(data) {
+ ajaxCallback(data);
+ self.setIsRunning(false);
+ //if query changed - rerun the search immediately
+ var newQuery = self.getValue();
+ if (newQuery && newQuery !== filter) {
+ self.activateNow();
+ }
+ },
error: function() {
ajaxCallback(false);
+ self.setIsRunning(false);
}
});
+ self.setIsRunning(true);
}
};