Here's how I did it:
I was already setting ac_selected to false on open:
$( "#company-name" ).autocomplete({
open: function(event, ui) {
$( "#company-name" ).data( {ac_selected: false} );
}
});
Then I set another data "found" on autocompleteresponse
$( "#company-name" ).on( "autocompleteresponse", function( event, ui ) {
$( "#company-name" ).data({found: JSON.stringify(ui)} );
} );
and then checked for a match on close
$( "#company-name" ).autocomplete({
close: function(event, ui) {
if ($( "#company-name" ).data("ac_selected")===false) {
var needle = $( "#company-name" ).val();
var haystack = JSON.parse( $( "#company-name" ).data("found") );
// The array I need to filter is actually contained in the content property
var result = haystack.content.filter(function ( input ) {
return input.label.toLowerCase() === needle.toLowerCase(); // do a case insensitive search
})[0];
if(result){
$( "#company-name" ).data( {ac_selected: true} );
$( "#company-name" ).val(result.label);
}
}
}
});