Autocomplete: Prevent keypress events caused by enter key when selecting an item. Fixes #6055 - Autocomplete: Selecting an item by pressing enter submits the form in Opera.

This commit is contained in:
Dmitry Petrov 2010-10-06 10:24:03 -04:00 committed by Scott González
parent 66346d04bf
commit c3b282fceb

View File

@ -28,7 +28,9 @@ $.widget( "ui.autocomplete", {
},
_create: function() {
var self = this,
doc = this.element[ 0 ].ownerDocument;
doc = this.element[ 0 ].ownerDocument,
suppressKeyPress;
this.element
.addClass( "ui-autocomplete-input" )
.attr( "autocomplete", "off" )
@ -43,6 +45,7 @@ $.widget( "ui.autocomplete", {
return;
}
suppressKeyPress = false;
var keyCode = $.ui.keyCode;
switch( event.keyCode ) {
case keyCode.PAGE_UP:
@ -65,6 +68,9 @@ $.widget( "ui.autocomplete", {
case keyCode.NUMPAD_ENTER:
// when menu is open and has focus
if ( self.menu.active ) {
// #6055 - Opera still allows the keypress to occur
// which causes forms to submit
suppressKeyPress = true;
event.preventDefault();
}
//passthrough - ENTER and TAB both select the current element
@ -91,6 +97,12 @@ $.widget( "ui.autocomplete", {
break;
}
})
.bind( "keypress.autocomplete", function( event ) {
if ( suppressKeyPress ) {
suppressKeyPress = false;
event.preventDefault();
}
})
.bind( "focus.autocomplete", function() {
if ( self.options.disabled ) {
return;