Принудительно выбирать автозаполнение виджета, если доступно точное совпадение, но разрешены несовпадающие записи

0

Мой старый заголовок был "Что-то похожее на 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" );
Теги:
autocomplete

1 ответ

0
Лучший ответ

Вот как я это сделал:

Я уже устанавливал 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);
        }
      }
    }
  });  
  • 0
    Одна из проблем заключается в том, что если есть задержка (либо из-за delay либо из-за проблем с сетью), возможно, что close вызывается до autocompleteresponse . Это может означать, что данные пусты или взяты из предыдущего поиска.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню