How to create generic (reusable) JavaScript autocomplete function
-
I now have a working JavaScript autocomplete function, thanks to help from many of you. Now I want to make the function reusable. There are three variables that need to be specified for each instance of the function, as shown below. What I don't know how to do is instantiate this function with different values for these three vars. Here is my HTML field: <div class="ui-widget"> Text or Value: <input type="text" id="dotmatch" /> </div> And here is the JavaScript code which I want to keep in its own .js file: var matchFieldName = 'dotmatch'; var resultFieldName = 'dotnumber'; var lookupURL = "/AutoSuggestJSTest/AutoSuggest.asmx/DOTList"; $(function() { $('#' + matchFieldName).autocomplete({ source: function(request, response) { $.ajax({ type: "POST", url: lookupURL, contentType: 'application/json', dataType: "json", data: JSON.stringify({ prefixText: request.term, count: 20 }), success: function(data) { var output = jQuery.parseJSON(data.d); response($.map(output, function(item) { return { label: item.Label + "(" + item.Value+ ")", value: item.Value } })); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }, minLength: 2, select: function(event, ui) { $('#' + resultFieldName).val(ui.item.value); return ui.item.label; } }); });
-
Answer:
insin was close. The solution I worked out this morning is; function AutoComplete(matchFieldName, resultFieldName, lookupURL) { $('#' + matchFieldName).autocomplete({ source: function(request, response) { $.ajax({ type: "POST", url: lookupURL, contentType: 'application/json', dataType: "json", data: JSON.stringify({ prefixText: request.term, count: 20 }), success: function(data) { var output = jQuery.parseJSON(data.d); response($.map(output, function(item) { return { value: item.Value, label: (item.Label == item.Value) ? item.Label : item.Label + "(" + item.Value + ")" } })); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }, minLength: 2, select: function(event, ui) { $('#' + resultFieldName).val(ui.item.value); } }); } On the web page: <div id="AutoSuggest"> DOT Job Title or Number: <input type="text" id="dotmatch" style="width:300px;" /> </div> And on the web page, after the tag: <script type="text/javascript" src="js/DOTAutocomplete.js"></script> <script type="text/javascript"> $(function() { AutoComplete("dotmatch", "dotnumber", "/AutoSuggestJSTest/AutoSuggest.asmx/DOTList"); }); </script>
Bob Jones at Stack Overflow Visit the source
Other answers
It looks like you're using jQuery, so you might want to http://docs.jquery.com/Plugins/Authoring. (function($) { $.fn.bobsAutocomplete = function(resultFieldName, lookupURL) { this.autocomplete({ source: function(request, response) { $.ajax({ type: "POST", url: lookupURL, contentType: 'application/json', dataType: "json", data: JSON.stringify({prefixText: request.term, count: 20}), success: function(data) { var output = jQuery.parseJSON(data.d); response($.map(output, function(item) { return { label: item.Label + "(" + item.Value+ ")", value: item.Value } })); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }, minLength: 2, select: function(event, ui) { $('#' + resultFieldName).val(ui.item.value); return ui.item.label; } }); return this; }; })(jQuery); Usage: $("#dotmatch").bobsAutocomplete("dotnumber", "/AutoSuggestJSTest/AutoSuggest.asmx/DOTList");
insin
Related Q & A:
- How to create a generic View for different Models?Best solution by Stack Overflow
- How to create deep object with dynamic name in Javascript?Best solution by Stack Overflow
- How to create an SlideShow in javascript?Best solution by Stack Overflow
- How to fix: undefined is not a function?Best solution by WordPress
- How to shorthand if else in jQuery function?Best solution by stackoverflow.com
Just Added Q & A:
- How many active mobile subscribers are there in China?Best solution by Quora
- How to find the right vacation?Best solution by bookit.com
- How To Make Your Own Primer?Best solution by thekrazycouponlady.com
- How do you get the domain & range?Best solution by ChaCha
- How do you open pop up blockers?Best solution by Yahoo! Answers
For every problem there is a solution! Proved by Solucija.
-
Got an issue and looking for advice?
-
Ask Solucija to search every corner of the Web for help.
-
Get workable solutions and helpful tips in a moment.
Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.