template/static/scripts/bootstrap-typeahead.js
function () { 
            var that = this,
                query = that.$element.val();
            
            if (query === that.query) {
                return that;
            }
    
            // Query changed
            that.query = query;

            // Cancel last timer if set
            if (that.ajax.timerId) {
                clearTimeout(that.ajax.timerId);
                that.ajax.timerId = null;
            }
            
            if (!query || query.length < that.ajax.triggerLength) {
                // Cancel the ajax callback if in progress
                if (that.ajax.xhr) {
                    that.ajax.xhr.abort();
                    that.ajax.xhr = null;
                    that.ajaxToggleLoadClass(false);
                }

                return that.shown ? that.hide() : that;
            }
                    
            // Query is good to send, set a timer
            that.ajax.timerId = setTimeout(function() {
                $.proxy(that.ajaxExecute(query), that)
            }, that.ajax.timeout);
                    
            return that;
        }
function () { 
            var that = this,
                query = that.$element.val();
            
            if (query === that.query) {
                return that;
            }
    
            // Query changed
            that.query = query;

            // Cancel last timer if set
            if (that.ajax.timerId) {
                clearTimeout(that.ajax.timerId);
                that.ajax.timerId = null;
            }
            
            if (!query || query.length < that.ajax.triggerLength) {
                // Cancel the ajax callback if in progress
                if (that.ajax.xhr) {
                    that.ajax.xhr.abort();
                    that.ajax.xhr = null;
                    that.ajaxToggleLoadClass(false);
                }

                return that.shown ? that.hide() : that;
            }
                    
            // Query is good to send, set a timer
            that.ajax.timerId = setTimeout(function() {
                $.proxy(that.ajaxExecute(query), that)
            }, that.ajax.timeout);
                    
            return that;
        }
function ( ) { var that = this , query = that . $element . val ( ) ; if ( query === that . query ) { return that ; } // Query changed that . query = query ; // Cancel last timer if set if ( that . ajax . timerId ) { clearTimeout ( that . ajax . timerId ) ; that . ajax . timerId = null ; } if ( ! query || query . length < that . ajax . triggerLength ) { // Cancel the ajax callback if in progress if ( that . ajax . xhr ) { that . ajax . xhr . abort ( ) ; that . ajax . xhr = null ; that . ajaxToggleLoadClass ( false ) ; } return that . shown ? that . hide ( ) : that ; } // Query is good to send, set a timer that . ajax . timerId = setTimeout ( function ( ) { $ . proxy ( that . ajaxExecute ( query ) , that ) } , that . ajax . timeout ) ; return that ; }
------------------------------------------------------------------  Handle AJAX source
------------------------------------------------------------------ Handle AJAX source