/** * jQuery Flexdatalist. * Autocomplete for input fields with support for datalists. * * Version: * 1.7.2 * * Depends: * jquery.js 1.7+ * * Demo and Documentation: * http://projects.sergiodinislopes.pt/flexdatalist/ * * Github: * https://github.com/sergiodlopes/jquery-flexdatalist/ * */ jQuery.fn.flexdatalist = function(options, value) { 'use strict'; var $document = $(document), $input = $(this), input, _this = this; /** * Each iteration. */ input = function() { var $this = $(this), _cache = {}, _previousText = '', _requestTimeout = null, _inputName = $this.attr('name'); if ($this.hasClass('flexdatalist-set')) { _this._destroy($this); } /** * Option management. */ $this._options = function (option, value) { var _options = $this.data('flexdatalist'); if (!_this._isDefined(option)) { return $this.data('flexdatalist'); } else if (_this._isDefined(value)) { _options[option] = value; } else if (!_this._isObject(option)) { return (_this._isDefined(_options, option) ? _options[option] : null); } else { _options = option; } _options.searchIn = _this._csvToArray(_options.searchIn); _options.relatives = _options.relatives && $(_options.relatives).length > 0 ? $(_options.relatives) : null; _options.textProperty = _options.textProperty === null ? _options.searchIn[0] : _options.textProperty; _options.visibleProperties = _this._csvToArray(_options.visibleProperties, _options.searchIn); $this.data('flexdatalist', _options); return $this; } $this._options($.extend({ url: null, data: [], params: {}, relatives: null, chainedRelatives: false, cache: true, minLength: 2, groupBy: false, selectionRequired: false, focusFirstResult: false, textProperty: null, valueProperty: null, visibleProperties: [], searchIn: ['label'], searchContain: false, searchEqual: false, searchDisabled: false, // New normalizeString: null, multiple: $this.attr('multiple'), maxShownResults: 100, toggleSelected: false, // New _values: [] }, options, $this.data()) ); // Handle multiple values var $_this = $this .clone(false) .attr({'list': null, 'name': null}) .addClass('flexdatalist-alias') .removeClass('flexdatalist'); if ($this._options('multiple')) { var $ulMultiple = $('