From e984ac21420d8b3b1d08746a662ded175a745b75 Mon Sep 17 00:00:00 2001 From: Yermo Date: Sat, 25 Jan 2014 17:39:27 -0500 Subject: [PATCH] autocomplete: do not set value on multi-line input. Fixes issue where contenteditable text was getting overwritten when wrapping past the bottom or top of the autocomplete menu. Fixes #9771 --- .../unit/autocomplete/autocomplete_events.js | 23 +++++++++++++++++++ ui/autocomplete.js | 6 ++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/unit/autocomplete/autocomplete_events.js b/tests/unit/autocomplete/autocomplete_events.js index fb1cf73a696..7ae6f46282f 100644 --- a/tests/unit/autocomplete/autocomplete_events.js +++ b/tests/unit/autocomplete/autocomplete_events.js @@ -140,6 +140,29 @@ asyncTest( "cancel focus", function() { }, 50 ); }); +asyncTest( "past end of menu contenteditable", function() { + expect( 1 ); + var customVal = "custom value", + element = $( "#autocomplete-contenteditable" ).autocomplete({ + delay: 0, + source: data, + focus: function() { + $( this ).text( customVal ); + return false; + } + }); + + element.simulate( "focus" ).text( "ja" ).keydown(); + + setTimeout(function() { + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + equal( element.text(), customVal ); + start(); + }, 50 ); +}); + asyncTest( "cancel select", function() { expect( 1 ); var customVal = "custom value", diff --git a/ui/autocomplete.js b/ui/autocomplete.js index c20ebf21abf..87e33a757d5 100644 --- a/ui/autocomplete.js +++ b/ui/autocomplete.js @@ -545,7 +545,11 @@ $.widget( "ui.autocomplete", { } if ( this.menu.isFirstItem() && /^previous/.test( direction ) || this.menu.isLastItem() && /^next/.test( direction ) ) { - this._value( this.term ); + + if ( ! this.isMultiLine ) { + this._value( this.term ); + } + this.menu.blur(); return; }