Skip to content
This repository was archived by the owner on Oct 8, 2021. It is now read-only.

Commit 923c1f8

Browse files
author
Gabriel Schulhof
committed
Filterable: Prevent form submission when user presses ENTER
Intercept ENTER on keydown and keypress, preventing default Fixes gh-7240
1 parent 18f872d commit 923c1f8

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

js/widgets/filterable.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ $.widget( "mobile.filterable", {
161161
this.document.find( selector );
162162

163163
this._on( search, {
164+
keydown: "_onKeyDown",
165+
keypress: "_onKeyPress",
164166
keyup: "_onKeyUp",
165167
change: "_onKeyUp",
166168
input: "_onKeyUp"
@@ -170,6 +172,21 @@ $.widget( "mobile.filterable", {
170172
this._search = search;
171173
},
172174

175+
// Prevent form submission
176+
_onKeyDown: function( event ) {
177+
if ( event.keyCode === $.ui.keyCode.ENTER ) {
178+
event.preventDefault();
179+
this._preventKeyPress = true;
180+
}
181+
},
182+
183+
_onKeyPress: function( event ) {
184+
if ( this._preventKeyPress ) {
185+
event.preventDefault();
186+
this._preventKeyPress = false;
187+
}
188+
},
189+
173190
_setOptions: function( options ) {
174191
var refilter = !( ( options.filterReveal === undefined ) &&
175192
( options.filterCallback === undefined ) &&

tests/unit/filterable/filterable_core.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,21 @@ test( "Listview with filter has hideDividers option set to true", function() {
1010
deepEqual( $( "#hidedividers-option-test" ).listview( "option", "hideDividers" ), true );
1111
});
1212

13+
test( "Filterable input prevents default on ENTER", function() {
14+
var event = $.Event( "keydown" ),
15+
input = $( "#test-input-preventDefault" );
16+
17+
event.keyCode = $.ui.keyCode.ENTER;
18+
19+
input.trigger( event );
20+
21+
deepEqual( event.isDefaultPrevented(), true, "keydown for ENTER default is prevented" );
22+
23+
event = $.Event( "keypress" );
24+
25+
input.trigger( event );
26+
27+
deepEqual( event.isDefaultPrevented(), true, "Subsequent keypress default is also prevented" );
28+
});
29+
1330
})( jQuery );

tests/unit/filterable/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@
4949
<div class="ui-content">
5050
<div id="hidedividers-option-test" data-nstest-role="listview" data-nstest-filter="true">
5151
</div>
52+
<form id="test-input-preventDefault-form">
53+
<input id="test-input-preventDefault">
54+
</form>
55+
<ul data-nstest-filter="true" id="test-input-preventDefault-list" data-nstest-input="#test-input-preventDefault">
56+
<li>Alabama</li>
57+
<li>California</li>
58+
<li>Oregon</li>
59+
</ul>
5260
</div>
5361
</div>
5462

0 commit comments

Comments
 (0)