Подтвердить что ты не робот

Автозаполнение jQuery UI показывает значение вместо метки в поле ввода

Потенциально простая проблема с автозаполнением jQuery UI превзошла меня. Мой источник

var ac = [
    {
        label: "One Thing",
        value: "One-Thing"
    },
    {
        label: "Two Thing",
        value: "Two-Thing"
    },      
]

Я вызываю виджет с

$(function() {
    $( "#search" ).autocomplete({
        source: PK.getAutocompleteSource(),
        focus: function( event, ui ) {
            $("#search").val(ui.item.label);
            return false;  
        },
        select: function( event, ui ) {
            $("#search").val(ui.item.label);
            PK.render(ui.item.value);
        }
    });
});

Все работает отлично. Когда я ввожу в поле ввода #search, соответствующая метка отображается в раскрывающемся списке, а когда я select выполняется правильный поиск. Виджет даже показывает label в поле ввода #search, поскольку я выбираю разные элементы в раскрывающемся меню, используя клавиши со стрелками (или мышь). За исключением того, что, как только я нажму "Enter", виджет заполнит поле ввода #search с помощью value вместо label. Поэтому поле показывает One-Thing вместо One Thing.

Как я могу это исправить? Наверняка, что я ожидаю, это более разумное поведение, не?

4b9b3361

Ответ 1

если вы хотите, чтобы метка была вашим значением, просто укажите источник

var ac = ["One Thing", "Two Thing"]      

альтернативно, метод select действия автозаполнения по умолчанию состоит в том, чтобы поместить объект value (если указан) в качестве значения вашего ввода. вы также можете поместить event.preventDefault() в функцию выбора, и он поместит метку в качестве значения (как у вас)

select: function( event, ui ) {
        event.preventDefault();
        $("#search").val(ui.item.label);
        PK.render(ui.item.value);
    }

Ответ 2

Если вы хотите, чтобы ваш ярлык был вашим значением в текстовом поле onFocus AND onSelect, используйте этот код:

select: function(event, ui) { 
        $('#hiddenid').val(ui.item.value); 
        event.preventDefault(); 
        $("#search").val(ui.item.label); },

focus: function(event, ui) { 
       event.preventDefault(); 
       $("#search").val(ui.item.label);}

Мне не хватает события onFocus (только установка события onSelect). Таким образом, значение продолжало отображаться в текстовом вводе.

Ответ 3

У меня все еще была проблема с клавишами со стрелками, показывающими значения. Поэтому я действительно счел, что лучше назначить значение и метку метке, а затем поместить значение на третье свойство данных. Например, поставьте его на id.

var ac = [
    {
        label: "One Thing",
        value: "One Thing",
        id: "One-Thing",
    },
    {
        label: "Two Thing",
        value: "Two Thing",
        id: "Two-Thing"
    },      
]

Затем, когда вы используете событие select, вы можете получить id из ui:

select: function( event, ui ) {
    PK.render(ui.item.id);
}