select = this.element.hide(),
selected = select.children( ":selected" ),
value = selected.val() ? selected.text() : "";
+
+ function removeIfInvalid(element) {
+ var value = $( element ).val(),
+ matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( value ) + "$", "i" ),
+ valid = false;
+ select.children( "option" ).each(function() {
+ if ( $( this ).text().match( matcher ) ) {
+ this.selected = valid = true;
+ return false;
+ }
+ });
+ if ( !valid ) {
+ // remove invalid value, as it didn't match anything
+ $( element )
+ .val( "" )
+ .attr( "title", value + " didn't match any item" )
+ .tooltip( "open" );
+ select.val( "" );
+ setTimeout(function() {
+ input.tooltip( "close" ).attr( "title", "" );
+ }, 2500 );
+ input.data( "autocomplete" ).term = "";
+ return false;
+ }
+ }
+
var input = this.input = $( "<input>" )
.insertAfter( select )
.val( value )
});
},
change: function( event, ui ) {
- if ( !ui.item ) {
- var value = $( this ).val(),
- matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( value ) + "$", "i" ),
- valid = false;
- select.children( "option" ).each(function() {
- if ( $( this ).text().match( matcher ) ) {
- this.selected = valid = true;
- return false;
- }
- });
- if ( !valid ) {
- // remove invalid value, as it didn't match anything
- $( this )
- .val( "" )
- .attr( "title", value + " didn't match any item" )
- .tooltip( "open" );
- select.val( "" );
- setTimeout(function() {
- input.tooltip( "close" ).attr( "title", "" );
- }, 2500 );
- input.data( "autocomplete" ).term = "";
- return false;
- }
- }
+ if ( !ui.item )
+ return removeIfInvalid( this );
}
})
.addClass( "ui-widget ui-widget-content ui-corner-left" );
// close if already visible
if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
input.autocomplete( "close" );
+ removeIfInvalid( input );
return;
}