diff --git a/hinter.js b/hinter.js index 8d2865a..f405893 100644 --- a/hinter.js +++ b/hinter.js @@ -2,7 +2,7 @@ Homepage: http://yourcmc.ru/wiki/SimpleAutocomplete License: MPL 2.0+ (http://www.mozilla.org/MPL/2.0/) - Version: 2015-01-16 + Version: 2015-03-25 (c) Vitaliy Filippov 2011-2015 Usage: @@ -15,11 +15,12 @@ dataLoader(hint, value[, more]) Callback which should load autocomplete options and then call: hint.replaceItems(newOptions, append) - newOptions = [ [ name, value, disabled, checked ] ], [ name, value ], ... ] + newOptions = [ [ name, value, disabled, checked OR id ] ], [ name, value ], ... ] name = HTML option name value = plaintext option value disabled = prevent selection of this option - checked = only meaningful when multipleListener is set + checked = (when multipleListener is set) is the item checked initially + id = (when idField is set) the value ID for idField append = 'more' parameter should be passed here Callback parameters: hint @@ -61,6 +62,10 @@ of the list, and SimpleAutocomplete will issue another request to dataLoader with incremented 'more' parameter when it will be clicked. You can also set moreMarker to false to disable this feature. + idField + If you specify an ID here, the selected value ID will be put into + a hidden field with this ID, while the original hinted input will + just contain the name of that value. persist If true, the hint layer will never be hidden. You can use it to create multiselect-like controls (see example at the homepage). @@ -90,8 +95,11 @@ var SimpleAutocomplete = function(input, dataLoader, params) this.prompt = params.prompt; this.delay = params.delay; this.moreMarker = params.moreMarker; + this.idField = params.idField; this.persist = params.persist; this.className = params.className || 'hintLayer'; + if (this.idField && typeof(this.idField) == 'string') + this.idField = document.getElementById(this.idField); // Default values if (this.moreMarker === undefined) @@ -317,6 +325,8 @@ SimpleAutocomplete.prototype.selectItem = function(index) if (!this.multipleDelimiter && !this.multipleListener) { this.input.value = this.items[index][1]; + if (this.idField) + this.idField.value = this.items[index][3]; this.hide(); } else @@ -455,6 +465,8 @@ SimpleAutocomplete.prototype.onChange = function(force) this.more = 0; if (v != this.curValue || force) { + if (this.idField) + this.idField.value = ''; this.curValue = v; if (!this.delay || force) this.dataLoader(this, v, this.more);