Hi,

I made a couple of modifications to the jQuery Autocomplete plugin
(Release 1.0). I am using the plugin on a multiple entry field and
quering a web service.

1. Myself and others have run into an issue which prevents users from
inputting items not in the autocomplete selection list. The solution
posted by Gustavo Picón (tabo) on Jörn's blog (http://bassistance.de/
jquery-plugins/jquery-plugin-autocomplete/) successfully corrects this
issue.

Code:
// matches also semicolon
case options.multiple && $.trim(options.multipleSeparator) == "," &&
KEY.COMMA:
//FIX: Allows user to input item not in selection
if (!options.mustMatch) {
        break;
}
case KEY.TAB:
case KEY.RETURN:
if( selectCurrent() ){



2. I am using a web service hosted outside of my application to
retrieve remote data.

Code:
                $("#txtTagInput").autocomplete('http://server/
webservice', {
                    contentType: "application/json",
                    cacheLength: 1,
                    max: 10,
                    multiple: true,
                    dataType: 'json'
                });


        function request(term, success, failure) {
                if (!options.matchCase)
                        term = term.toLowerCase();
                var data = cache.load(term);
                // recieve the cached data
                if (data && data.length) {
                        success(term, data);
                // if an AJAX url has been supplied, try loading the data now
                } else if( (typeof options.url == "string") && 
(options.url.length >
0) ){

                        var extraParams = {
                                timestamp: +new Date()
                        };
                        $.each(options.extraParams, function(key, param) {
                                extraParams[key] = typeof param == "function" ? 
param() : param;
                        });

                        $.ajax({
                                // try to leverage ajaxQueue plugin to abort 
previous requests
                                mode: "abort",
                                // limit abortion to this input
                                port: "autocomplete" + input.name,
                                dataType: options.dataType,
                                url: options.url,
                                data: $.extend({
                                        q: lastWord(term),
                                        limit: options.max
                                }, extraParams),
                                success: function(data) {
                                    if (options.dataType == "json") {
                                            cache.flush();
                                            cache.populateUrlData(data);
                                            var results = cache.load(term);
                                            success(term, results);
                                    }
                                    else {
                                                var parsed = options.parse && 
options.parse(data) ||
parse(data);
                                                cache.add(term, parsed);
                                                success(term, parsed);
                    }
                                }
                        });
                } else {
                        // if we have a failure, we need to empty the list -- 
this prevents
the the [TAB] key from selecting the last successful match
                        select.emptyList();
                        failure(term);
                }
        };






jquery.autocomplete.js Code:
        function populate(urlData){
                if (urlData) {
                        options.data = urlData;
                }

                [original populate() function]



        return {
                flush: flush,
                add: add,
                populate: populate,
                populateUrlData: function(urlData) { populate(urlData); },
                load: function(q) {

Reply via email to