From d110e29cf4ef81f32bfd935810c263217716287d Mon Sep 17 00:00:00 2001 From: Emerson Macedo Date: Fri, 21 Feb 2014 15:07:30 -0300 Subject: [PATCH 1/2] Added changeImputDisabled option to not change the input value when select, move up or down a suggest. --- spec/autocompleteBehavior.js | 40 ++++++++++++++++++++++++++++++++++++ src/jquery.autocomplete.js | 8 ++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/spec/autocompleteBehavior.js b/spec/autocompleteBehavior.js index 80718cfa..b5726f11 100644 --- a/spec/autocompleteBehavior.js +++ b/spec/autocompleteBehavior.js @@ -543,6 +543,46 @@ describe('Autocomplete', function () { expect(suggestionData).toBeNull(); }); + describe('options.changeInputDisabled is true', function() { + var input = $(''), + instance, + suggestionData = null; + + beforeEach(function() { + input.autocomplete({ + lookup: [{ value: 'Jamaica', data: 'J' }, { value: 'Jamaica2', data: 'J' }, { value: 'Jamaica3', data: 'J' }], + changeInputDisabled: true, + onSelect: function (suggestion) { + suggestionData = suggestion.data; + } + }); + + input.val('J'); + instance = input.autocomplete(); + }); + + it('Should NOT change input value when item is selected', function() { + instance.onValueChange(); + instance.select(0); + + expect(input.val()).toEqual('J'); + }); + + it('Should NOT change input value when move down', function() { + instance.onValueChange(); + instance.moveDown(); + + expect(input.val()).toEqual('J'); + }); + + it('Should NOT change input value when move up', function() { + instance.onValueChange(); + instance.moveUp(); + + expect(input.val()).toEqual('J'); + }); + }); + it('Should use serviceUrl and params as cacheKey', function () { var input = $(''), instance, diff --git a/src/jquery.autocomplete.js b/src/jquery.autocomplete.js index f2114bf5..c46dda5f 100644 --- a/src/jquery.autocomplete.js +++ b/src/jquery.autocomplete.js @@ -77,6 +77,7 @@ currentRequest: null, triggerSelectOnValidInput: true, preventBadQueries: true, + changeInputDisabled: false, lookupFilter: function (suggestion, originalQuery, queryLowerCase) { return suggestion.value.toLowerCase().indexOf(queryLowerCase) !== -1; }, @@ -750,7 +751,10 @@ $(that.suggestionsContainer).scrollTop(offsetTop - that.options.maxHeight + heightDelta); } - that.el.val(that.getValue(that.suggestions[index].value)); + if (!that.options.changeInputDisabled) { + that.el.val(that.getValue(that.suggestions[index].value)); + } + that.signalHint(null); }, @@ -760,7 +764,7 @@ suggestion = that.suggestions[index]; that.currentValue = that.getValue(suggestion.value); - that.el.val(that.currentValue); + if (!that.options.changeInputDisabled) { that.el.val(that.currentValue); } that.signalHint(null); that.suggestions = []; that.selection = suggestion; From e5c457b69485dc015271a222bd6b6630462d1f01 Mon Sep 17 00:00:00 2001 From: Emerson Macedo Date: Fri, 21 Feb 2014 16:13:58 -0300 Subject: [PATCH 2/2] Added hideOnSelectDisabled option to prevent suggestion box to hide when select. Very useful when using changeInputDisabled is true. --- spec/autocompleteBehavior.js | 21 +++++++++++++++++++++ src/jquery.autocomplete.js | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/spec/autocompleteBehavior.js b/spec/autocompleteBehavior.js index b5726f11..1c5b4522 100644 --- a/spec/autocompleteBehavior.js +++ b/spec/autocompleteBehavior.js @@ -543,6 +543,27 @@ describe('Autocomplete', function () { expect(suggestionData).toBeNull(); }); + it('Should NOT hide suggestions when options.hideOnSelectDisabled is true and item is selected', function() { + $('.autocomplete-suggestions').remove(); + + var input = $(''), + instance, + suggestionData = null; + + input.autocomplete({ + lookup: [{ value: 'Jamaica', data: 'J' }], + hideOnSelectDisabled: true + }); + + input.val('J'); + instance = input.autocomplete(); + + instance.onValueChange(); + instance.select(0); + + expect($('.autocomplete-suggestions').is(':visible')).toBeTruthy(); + }); + describe('options.changeInputDisabled is true', function() { var input = $(''), instance, diff --git a/src/jquery.autocomplete.js b/src/jquery.autocomplete.js index c46dda5f..804dc064 100644 --- a/src/jquery.autocomplete.js +++ b/src/jquery.autocomplete.js @@ -78,6 +78,7 @@ triggerSelectOnValidInput: true, preventBadQueries: true, changeInputDisabled: false, + hideOnSelectDisabled: false, lookupFilter: function (suggestion, originalQuery, queryLowerCase) { return suggestion.value.toLowerCase().indexOf(queryLowerCase) !== -1; }, @@ -697,7 +698,7 @@ select: function (i) { var that = this; - that.hide(); + if (!that.options.hideOnSelectDisabled) { that.hide(); } that.onSelect(i); },