]> source.dussan.org Git - jquery-ui.git/commitdiff
Autocomplete: Fixed setting of valueMethod for textareas. Fixes #7674 - Autocomplete...
authorScott González <scott.gonzalez@gmail.com>
Wed, 31 Aug 2011 00:45:48 +0000 (20:45 -0400)
committerScott González <scott.gonzalez@gmail.com>
Wed, 31 Aug 2011 00:45:48 +0000 (20:45 -0400)
tests/unit/autocomplete/autocomplete.html
tests/unit/autocomplete/autocomplete_events.js
ui/jquery.ui.autocomplete.js

index 8dc86c62185ae3a5fe20727be7db8143714c5418..e5987350b3718f56db9f6d263762c2727c675aed 100644 (file)
@@ -39,6 +39,7 @@
 <div id="ac-wrap1" class="ac-wrap"></div>
 <div id="ac-wrap2" class="ac-wrap"><input id="autocomplete" class="foo"></div>
 <div id="autocomplete-contenteditable" contenteditable="" tabindex=0></div>
+<textarea id="autocomplete-textarea"></textarea>
 
 </div>
 </body>
index c6d42ddcce74fa9fb50bf8e686fe241e8ab5ed6f..6813cfa71d51224abed475fc040cfcab95ce878d 100644 (file)
@@ -4,110 +4,75 @@ module( "autocomplete: events" );
 
 var data = [ "Clojure", "COBOL", "ColdFusion", "Java", "JavaScript", "Scala", "Scheme" ];
 
-asyncTest( "all events", function() {
-       expect( 13 );
-       var element = $( "#autocomplete" )
-                       .autocomplete({
-                               autoFocus: false,
-                               delay: 0,
-                               source: data,
-                               search: function( event ) {
-                                       equal( event.originalEvent.type, "keydown", "search originalEvent" );
-                               },
-                               response: function( event, ui ) {
-                                       deepEqual( ui.content, [
-                                               { label: "Clojure", value: "Clojure" },
-                                               { label: "Java", value: "Java" },
-                                               { label: "JavaScript", value: "JavaScript" }
-                                       ], "response ui.content" );
-                                       ui.content.splice( 0, 1 );
-                               },
-                               open: function( event ) {
-                                       ok( menu.is( ":visible" ), "menu open on open" );
-                               },
-                               focus: function( event, ui ) {
-                                       equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
-                                       deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
-                               },
-                               close: function( event ) {
-                                       equal( event.originalEvent.type, "menuselect", "close originalEvent" );
-                                       ok( menu.is( ":hidden" ), "menu closed on close" );
-                               },
-                               select: function( event, ui ) {
-                                       equal( event.originalEvent.type, "menuselect", "select originalEvent" );
-                                       deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
-                               },
-                               change: function( event, ui ) {
-                                       equal( event.originalEvent.type, "blur", "change originalEvent" );
-                                       deepEqual( ui.item, { label: "Java", value: "Java" }, "chnage ui.item" );
-                                       ok( menu.is( ":hidden" ), "menu closed on change" );
-                                       start();
-                               }
-                       }),
-               menu = element.autocomplete( "widget" );
-
-       element.focus().val( "j" ).keydown();
-       setTimeout(function() {
-               ok( menu.is( ":visible" ), "menu is visible after delay" );
-               element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
-               element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
-               // blurring through jQuery causes a bug in IE 6 which causes the
-               // autocompletechange event to occur twice
-               element[0].blur();
-       }, 50 );
-});
-
-asyncTest( "all events - contenteditable", function() {
-       expect( 13 );
-       var element = $( "#autocomplete-contenteditable" )
-               .autocomplete({
-                       autoFocus: false,
-                       delay: 0,
-                       source: data,
-                       search: function( event ) {
-                               equal( event.originalEvent.type, "keydown", "search originalEvent" );
-                       },
-                       response: function( event, ui ) {
-                               deepEqual( ui.content, [
-                                       { label: "Clojure", value: "Clojure" },
-                                       { label: "Java", value: "Java" },
-                                       { label: "JavaScript", value: "JavaScript" }
-                               ], "response ui.content" );
-                               ui.content.splice( 0, 1 );
-                       },
-                       open: function( event ) {
-                               ok( menu.is( ":visible" ), "menu open on open" );
-                       },
-                       focus: function( event, ui ) {
-                               equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
-                               deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
-                       },
-                       close: function( event ) {
-                               equal( event.originalEvent.type, "menuselect", "close originalEvent" );
-                               ok( menu.is( ":hidden" ), "menu closed on close" );
-                       },
-                       select: function( event, ui ) {
-                               equal( event.originalEvent.type, "menuselect", "select originalEvent" );
-                               deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
-                       },
-                       change: function( event, ui ) {
-                               equal( event.originalEvent.type, "blur", "change originalEvent" );
-                               deepEqual( ui.item, { label: "Java", value: "Java" }, "chnage ui.item" );
-                               ok( menu.is( ":hidden" ), "menu closed on change" );
-                               start();
-                       }
-               }),
-       menu = element.autocomplete( "widget" );
-
-       element.focus().text( "j" ).keydown();
-       setTimeout(function() {
-               ok( menu.is( ":visible" ), "menu is visible after delay" );
-               element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
-               element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
-               // TODO: blurring through jQuery causes a bug in IE 6 which causes the
-               // autocompletechange event to occur twice
-               element[0].blur();
-       }, 50 );
+$.each([
+       {
+               type: "input",
+               selector: "#autocomplete",
+               valueMethod: "val"
+       },
+       {
+               type: "textarea",
+               selector: "#autocomplete-textarea",
+               valueMethod: "val"
+       },
+       {
+               type: "contenteditable",
+               selector: "#autocomplete-contenteditable",
+               valueMethod: "text"
+       }
+], function( i, settings ) {
+       asyncTest( "all events - " + settings.type, function() {
+               expect( 13 );
+               var element = $( settings.selector )
+                               .autocomplete({
+                                       autoFocus: false,
+                                       delay: 0,
+                                       source: data,
+                                       search: function( event ) {
+                                               equal( event.originalEvent.type, "keydown", "search originalEvent" );
+                                       },
+                                       response: function( event, ui ) {
+                                               deepEqual( ui.content, [
+                                                       { label: "Clojure", value: "Clojure" },
+                                                       { label: "Java", value: "Java" },
+                                                       { label: "JavaScript", value: "JavaScript" }
+                                               ], "response ui.content" );
+                                               ui.content.splice( 0, 1 );
+                                       },
+                                       open: function( event ) {
+                                               ok( menu.is( ":visible" ), "menu open on open" );
+                                       },
+                                       focus: function( event, ui ) {
+                                               equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
+                                               deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
+                                       },
+                                       close: function( event ) {
+                                               equal( event.originalEvent.type, "menuselect", "close originalEvent" );
+                                               ok( menu.is( ":hidden" ), "menu closed on close" );
+                                       },
+                                       select: function( event, ui ) {
+                                               equal( event.originalEvent.type, "menuselect", "select originalEvent" );
+                                               deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
+                                       },
+                                       change: function( event, ui ) {
+                                               equal( event.originalEvent.type, "blur", "change originalEvent" );
+                                               deepEqual( ui.item, { label: "Java", value: "Java" }, "chnage ui.item" );
+                                               ok( menu.is( ":hidden" ), "menu closed on change" );
+                                               start();
+                                       }
+                               }),
+                       menu = element.autocomplete( "widget" );
+       
+               element.focus()[ settings.valueMethod ]( "j" ).keydown();
+               setTimeout(function() {
+                       ok( menu.is( ":visible" ), "menu is visible after delay" );
+                       element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
+                       element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
+                       // blurring through jQuery causes a bug in IE 6 which causes the
+                       // autocompletechange event to occur twice
+                       element[0].blur();
+               }, 50 );
+       });
 });
 
 asyncTest( "change without selection", function() {
index 3e016368227765f3be16134677a9b3436548013d..b871715bae57ae23f3500118cbbe27b6d93c6c3a 100644 (file)
@@ -51,7 +51,7 @@ $.widget( "ui.autocomplete", {
                        suppressKeyPress,
                        suppressInput;
 
-               this.valueMethod = this.element[ this.element.is( "input" ) ? "val" : "text" ];
+               this.valueMethod = this.element[ this.element.is( "input,textarea" ) ? "val" : "text" ];
 
                this.element
                        .addClass( "ui-autocomplete-input" )