Skip to content

Commit

Permalink
Autocomplete: Added appendTo option. Fixes #5836 - Autocomplete: add …
Browse files Browse the repository at this point in the history
…appendTo option.
  • Loading branch information
scottgonzalez committed Jul 21, 2010
1 parent 245b932 commit 74e0d4f
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 4 deletions.
4 changes: 2 additions & 2 deletions tests/unit/autocomplete/autocomplete.html
Expand Up @@ -36,8 +36,8 @@ <h2 id="qunit-userAgent"></h2>

<div id="main" style="position: absolute; top: -10000px; left: -10000px;">

<div><input id="autocomplete" class="foo" /></div>

<div id="ac-wrap1" class="ac-wrap"></div>
<div id="ac-wrap2" class="ac-wrap"><input id="autocomplete" class="foo" /></div>
</div>

</body>
Expand Down
1 change: 1 addition & 0 deletions tests/unit/autocomplete/autocomplete_defaults.js
Expand Up @@ -3,6 +3,7 @@
*/

var autocomplete_defaults = {
appendTo: "body",
delay: 300,
disabled: false,
minLength: 1,
Expand Down
30 changes: 30 additions & 0 deletions tests/unit/autocomplete/autocomplete_options.js
Expand Up @@ -68,6 +68,36 @@ test("cache: false", function() {

var data = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby", "python", "c", "scala", "groovy", "haskell", "perl"];

test( "appendTo", function() {
var ac = $( "#autocomplete" ).autocomplete();
same( ac.autocomplete( "widget" ).parent()[0], document.body, "defaults to body" );
ac.autocomplete( "destroy" );

ac.autocomplete({
appendTo: "#ac-wrap2"
});
same( ac.autocomplete( "widget" ).parent()[0], $( "#ac-wrap2" )[0], "id" );
ac.autocomplete( "destroy" );

ac.autocomplete({
appendTo: ".ac-wrap"
});
same( ac.autocomplete( "widget" ).parent()[0], $( "#ac-wrap1" )[0], "class" );
same( $( "#ac-wrap2 .ui-autocomplete").length, 0, "class - only appends to one element")
ac.autocomplete( "destroy" );

ac.autocomplete({
appendTo: null
});
same( ac.autocomplete( "widget" ).parent()[0], document.body, "null" );
ac.autocomplete( "destroy" );

ac.autocomplete().autocomplete( "option", "appendTo", "#ac-wrap1" );
same( ac.autocomplete( "widget" ).parent()[0], $( "#ac-wrap1" )[0], "modified after init" );
ac.autocomplete( "destroy" );
});


test("delay", function() {
var ac = $("#autocomplete").autocomplete({
source: data,
Expand Down
8 changes: 6 additions & 2 deletions ui/jquery.ui.autocomplete.js
Expand Up @@ -16,6 +16,7 @@

$.widget( "ui.autocomplete", {
options: {
appendTo: "body",
delay: 300,
minLength: 1,
position: {
Expand Down Expand Up @@ -104,7 +105,7 @@ $.widget( "ui.autocomplete", {
};
this.menu = $( "<ul></ul>" )
.addClass( "ui-autocomplete" )
.appendTo( "body", doc )
.appendTo( $( this.options.appendTo || "body", doc )[0] )
// prevent the close-on-blur in case of a "slow" click on the menu (long mousedown)
.mousedown(function() {
// use another timeout to make sure the blur-event-handler on the input was already triggered
Expand Down Expand Up @@ -166,11 +167,14 @@ $.widget( "ui.autocomplete", {
$.Widget.prototype.destroy.call( this );
},

_setOption: function( key ) {
_setOption: function( key, value ) {
$.Widget.prototype._setOption.apply( this, arguments );
if ( key === "source" ) {
this._initSource();
}
if ( key === "appendTo" ) {
this.menu.element.appendTo( $( value || "body", this.element.ownerDocument )[0] )
}
},

_initSource: function() {
Expand Down

0 comments on commit 74e0d4f

Please sign in to comment.