diff --git a/README.md b/README.md index 22ba937..28d9d10 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Lightweight AJAX autocomplete for Bootstrap * [jQuery](https://jquery.com/download/) * [Bootstrap 3](http://getbootstrap.com/) - +* [Bootstrap 4](http://getbootstrap.com/) ## Usage @@ -31,23 +31,109 @@ $('#input').bootcomplete({url:'/search.php',options}); ] ``` -## Options - -* **url:** The url to submit query - -* **method:** Request method (get, post) - -* **wrapperClass:** CSS Class used for the element wrapper - -* **menuClass:** CSS Class used for the suggestions menu - -* **idField:** Include hidden input field for selected option id (true,false) Default: true - -* **idFieldName:** Hidden input field name. Default: elementName_id +### Custom Dropdown +You can set a custom format for each option of the dropdown with dropdownFormat option: -* **minLength:** Minimum string length before sending query request - -* **dataParams:** Send additional data parameters with request. Usage: ```dataParams: {keyName : value}``` +```javascript +var options = { + url: 'someURL', + dropdownFormat: function( j ){ + return ' ' + j.label +'' + } + } + +$('input[name=autocomplete]').bootcomplete(options) +``` -* **formParams:** Send chained form parameters with request. Usage: ```formParams: {keyName : $('#formElement')}``` +#### Serverside JSON Response Object +```php +[ + { + "id": "1", + "label": "My Custom Option", + "logo": "http:\/\/url\/web\/uploads\/avatars\/avatar-custom.png" + } +] +``` +## Options + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionTypeDefaultDescription
urlstringnullThe url to submit query
methodstringGETRequest method (get, post)
wrapperClassstringnullCSS Class used for the element wrapper
menuClassstringnullCSS Class used for the suggestions menu
idFieldstringnullInclude hidden input field for selected option id (true,false) Default: true
idFieldNamestringnullHidden input field name. Default: elementName_id
minLengthintnullMinimum string length before sending query request
dataParamsjsonnullSend additional data parameters with request. Usage:
dataParams: {keyName : value}
formParamsjQuery ObjectnullSend chained form parameters with request. Usage:
formParams: {keyName : $('#formElement')}
beforeSelectfunctionnullCallback, triggers before the population of dropdown list. Usage:
beforeSelect: function(){ alert('try me') }
afterSelectFunctionnullCallback, triggers after select an option from the dropdown list. Usage:
afterSelect: function(id, value) { alert('try me after') }
dropdownFormatFunctionnullCallback, returns a custom format for the dropdown list. Usage:
dropdownFormat: function( j ) { return ''+ j.label + ' - ' + j.someExtraTextFromTheServerJSON +'' }
diff --git a/dist/jquery.bootcomplete.js b/dist/jquery.bootcomplete.js index 25e6c10..656cb14 100644 --- a/dist/jquery.bootcomplete.js +++ b/dist/jquery.bootcomplete.js @@ -5,6 +5,8 @@ * @version 1.0 * @license MIT License * +* @forked Renan Díaz | https://reandimo.site/ +* */ (function ( $ ) { @@ -19,7 +21,10 @@ idFieldName : $(this).attr('name')+"_id", minLength : 3, dataParams : {}, - formParams : {} + formParams : {}, + beforeSelect : function() {}, + afterSelect : function(id, value) {}, + dropdownFormat : null } var settings = $.extend( {}, defaults, options ); @@ -51,6 +56,9 @@ function searchQuery(){ + //beforeSelect Function + settings.beforeSelect.call(this); + var arr = []; $.each(settings.formParams,function(k,v){ arr[k]=$(v).val() @@ -77,7 +85,13 @@ success: function( json ) { var results = '' $.each( json, function(i, j) { - results += ''+j.label+'' + //Check if custom format is set + if (settings.dropdownFormat !== '' && settings.dropdownFormat !== undefined && settings.dropdownFormat !== null) { + results += settings.dropdownFormat.call(this, j); + }else{ + results += ''+j.label+'' + } + }); $(that).next('.'+settings.menuClass).html(results) @@ -106,6 +120,13 @@ } } $(that).next('.' + settings.menuClass).hide(); + + var id = $(this).data('id'), + value = $(this).data('label'); + + //afterSelect Function + settings.afterSelect.call(this, id, value); + return false; }