Мой старый заголовок был "Что-то похожее на mustMatch для автозаполнения JQ UI" Но я не знаю, достаточно ли это объяснимо.
Я не уверен, что показ моего кода будет иметь какое-то значение для этого вопроса, поэтому я сейчас его оставлю.
У меня есть виджет JQuery UI Autocomplte. Я нашел кромку, я не уверен, как обращаться. Пусть говорят, что поисковые значения включают "The Rage", а новый элемент вводится под названием "The Rag".
Ну, клавиша [ESC] позволяет выйти из автозаполнения без выбора. Это желательно в моем случае.
То, что НЕ желательно, состоит в том, что если в этом случае кто-то набирает "The Rage" и нажимает [ESC], тогда "The Rage" находится в поле ввода, но мой скрипт не знает, что это существующий элемент, поэтому мне нужно " должны совпадать, если доступно точное соответствие "
Я инициализирую его следующим образом:
$( "#company-name" ).autocomplete();
$( "#company-name" ).autocomplete({ source: "autocomplete/company_ac.php"});
$( "#company-name" ).autocomplete( "option", "minLength", 3 );
$( "#company-name" ).autocomplete({ autoFocus: true });
$( "#company-name" ).autocomplete( "enable" );
Вот как я это сделал:
Я уже устанавливал ac_selected на false при открытии:
$( "#company-name" ).autocomplete({
open: function(event, ui) {
$( "#company-name" ).data( {ac_selected: false} );
}
});
Затем я установил другие данные, найденные на автокомпьютере
$( "#company-name" ).on( "autocompleteresponse", function( event, ui ) {
$( "#company-name" ).data({found: JSON.stringify(ui)} );
} );
и затем проверили на матч при закрытии
$( "#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);
}
}
}
});
delay
либо из-за проблем с сетью), возможно, чтоclose
вызывается доautocompleteresponse
. Это может означать, что данные пусты или взяты из предыдущего поиска.