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) {