Skip to content

Commit 2ef45a1

Browse files
author
Gabriel Schulhof
committed
Filterable: Reset flag "preventKeyPress" at each keydown
Remove all handlers when detaching input Fixes jquery-archivegh-7830 Fixes jquery-archivegh-7865 Closes jquery-archivegh-7866
1 parent ba30238 commit 2ef45a1

File tree

3 files changed

+72
-2
lines changed

3 files changed

+72
-2
lines changed

js/widgets/filterable.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ $.widget( "mobile.filterable", {
154154
}
155155

156156
if ( search ) {
157-
this._off( search, "keyup change input" );
157+
this._off( search, "keyup keydown keypress change input" );
158158
search = null;
159159
}
160160

@@ -177,6 +177,7 @@ $.widget( "mobile.filterable", {
177177

178178
// Prevent form submission
179179
_onKeyDown: function( event ) {
180+
this._preventKeyPress = false;
180181
if ( event.keyCode === $.ui.keyCode.ENTER ) {
181182
event.preventDefault();
182183
this._preventKeyPress = true;

tests/integration/filterable/filterable_core.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,4 +362,52 @@
362362
]);
363363
});
364364

365+
test( "Default not prevented on keystroke following 'Enter'", function() {
366+
var event,
367+
input = $( "#test-keyboard-flag-reset-input" );
368+
369+
event = $.Event( "keydown" );
370+
event.keyCode = $.ui.keyCode.ENTER;
371+
input.trigger( event );
372+
deepEqual( event.isDefaultPrevented(), true, "'Enter' keydown default prevented" );
373+
374+
event = $.Event( "keypress" );
375+
event.keyCode = $.ui.keyCode.ENTER;
376+
input.trigger( event );
377+
deepEqual( event.isDefaultPrevented(), true,
378+
"'Enter' keypress following 'Enter' keydown default prevented" );
379+
380+
event = $.Event( "keydown" );
381+
event.keyCode = $.ui.keyCode.ENTER;
382+
input.trigger( event );
383+
deepEqual( event.isDefaultPrevented(), true, "'Enter' keydown default prevented again" );
384+
385+
event = $.Event( "keydown" );
386+
event.keyCode = 85;
387+
input.trigger( event );
388+
deepEqual( event.isDefaultPrevented(), false, "'u' keydown default not prevented" );
389+
390+
event = $.Event( "keypress" );
391+
event.keyCode = 85;
392+
input.trigger( event );
393+
deepEqual( event.isDefaultPrevented(), false, "'u' keypress default not prevented" );
394+
});
395+
396+
test( "All event handlers are removed from input", function() {
397+
deepEqual( $._data( $( "#test-handler-removal-input" )[ 0 ] ), {},
398+
"Private data for input is initially empty" );
399+
400+
$( "#test-handler-removal-list" )
401+
.filterable( "option", "input", "#test-handler-removal-input" );
402+
403+
notDeepEqual( $._data( $( "#test-handler-removal-input" )[ 0 ] ), {},
404+
"Private data for input not empty after setting as filterable input" );
405+
406+
$( "#test-handler-removal-list" )
407+
.filterable( "option", "input", false );
408+
409+
deepEqual( $._data( $( "#test-handler-removal-input" )[ 0 ] ), {},
410+
"Private data for input is empty again after unsetting as filterable input" );
411+
});
412+
365413
})(jQuery);

tests/integration/filterable/index.html

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
"widgets/forms/button",
3232
"widgets/controlgroup",
3333
"widgets/forms/select",
34-
"widgets/forms/textinput",
3534
"buttonMarkup",
3635
"widgets/forms/checkboxradio"
3736
],
@@ -326,6 +325,28 @@ <h1>Filterable</h1>
326325
<li>New York, NY</li>
327326
</ul>
328327

328+
<input id="test-keyboard-flag-reset-input">
329+
<ul id="test-keyboard-flag-reset-list"
330+
data-nstest-role="listview"
331+
data-nstest-filter="true"
332+
data-nstest-input="#test-keyboard-flag-reset-input">
333+
<li id="acura">Acura</li>
334+
<li id="audi">Audi</li>
335+
<li id="bmw">BMW</li>
336+
<li id="cadillac">Cadillac</li>
337+
<li id="ferrari">Ferrari</li>
338+
</ul>
339+
340+
<input id="test-handler-removal-input">
341+
<ul id="test-handler-removal-list"
342+
data-nstest-role="listview"
343+
data-nstest-filter="true">
344+
<li id="acura">Acura</li>
345+
<li id="audi">Audi</li>
346+
<li id="bmw">BMW</li>
347+
<li id="cadillac">Cadillac</li>
348+
<li id="ferrari">Ferrari</li>
349+
</ul>
329350
</div>
330351
</div>
331352

0 commit comments

Comments
 (0)