3 module( "autocomplete: events" );
5 var data = [ "Clojure", "COBOL", "ColdFusion", "Java", "JavaScript", "Scala", "Scheme" ];
10 selector: "#autocomplete",
15 selector: "#autocomplete-textarea",
19 type: "contenteditable",
20 selector: "#autocomplete-contenteditable",
23 ], function( i, settings ) {
24 asyncTest( "all events - " + settings.type, function() {
26 var element = $( settings.selector )
31 search: function( event ) {
32 equal( event.originalEvent.type, "keydown", "search originalEvent" );
34 response: function( event, ui ) {
35 deepEqual( ui.content, [
36 { label: "Clojure", value: "Clojure" },
37 { label: "Java", value: "Java" },
38 { label: "JavaScript", value: "JavaScript" }
39 ], "response ui.content" );
40 ui.content.splice( 0, 1 );
43 ok( menu.is( ":visible" ), "menu open on open" );
45 focus: function( event, ui ) {
46 equal( event.originalEvent.type, "menufocus", "focus originalEvent" );
47 deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" );
49 close: function( event ) {
50 equal( event.originalEvent.type, "menuselect", "close originalEvent" );
51 ok( menu.is( ":hidden" ), "menu closed on close" );
53 select: function( event, ui ) {
54 equal( event.originalEvent.type, "menuselect", "select originalEvent" );
55 deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" );
57 change: function( event, ui ) {
58 equal( event.originalEvent.type, "blur", "change originalEvent" );
59 deepEqual( ui.item, { label: "Java", value: "Java" }, "change ui.item" );
60 ok( menu.is( ":hidden" ), "menu closed on change" );
64 menu = element.autocomplete( "widget" );
66 element.simulate( "focus" )[ settings.valueMethod ]( "j" ).keydown();
67 setTimeout(function() {
68 ok( menu.is( ":visible" ), "menu is visible after delay" );
69 element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
70 element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
71 // blur must be async for IE to handle it properly
72 setTimeout(function() {
73 element.simulate( "blur" );
79 asyncTest( "change without selection", function() {
81 var element = $( "#autocomplete" ).autocomplete({
84 change: function( event, ui ) {
85 strictEqual( ui.item, null );
89 element.triggerHandler( "focus" );
90 element.val( "ja" ).triggerHandler( "blur" );
93 asyncTest( "cancel search", function() {
96 element = $( "#autocomplete" ).autocomplete({
101 equal( element.val(), "ja", "val on first search" );
105 equal( element.val(), "java", "val on second search" );
108 ok( true, "menu opened" );
111 menu = element.autocomplete( "widget" );
112 element.val( "ja" ).keydown();
113 setTimeout(function() {
114 ok( menu.is( ":hidden" ), "menu is hidden after first search" );
115 element.val( "java" ).keydown();
116 setTimeout(function() {
117 ok( menu.is( ":visible" ), "menu is visible after second search" );
118 equal( menu.find( ".ui-menu-item" ).length, 2, "# of menu items" );
124 asyncTest( "cancel focus", function() {
126 var customVal = "custom value",
127 element = $( "#autocomplete" ).autocomplete({
131 $( this ).val( customVal );
135 element.val( "ja" ).keydown();
136 setTimeout(function() {
137 element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
138 equal( element.val(), customVal );
143 asyncTest( "cancel select", function() {
145 var customVal = "custom value",
146 element = $( "#autocomplete" ).autocomplete({
150 $( this ).val( customVal );
154 element.val( "ja" ).keydown();
155 setTimeout(function() {
156 element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } );
157 element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } );
158 equal( element.val(), customVal );
163 asyncTest( "blur during remote search", function() {
165 var ac = $( "#autocomplete" ).autocomplete({
167 source: function( request, response ) {
168 ok( true, "trigger request" );
169 ac.simulate( "blur" );
170 setTimeout(function() {
171 response([ "result" ]);
176 ok( false, "opened after a blur" );
179 ac.val( "ro" ).keydown();