1

Я реализовал виджет JQuery UI Autocomplete Combobox, который можно найти здесь: https://jqueryui.com/autocomplete/#combobox.jQueryUI autoselect combobox события не срабатывают

Автозаполнение работает, и событие «select» успешно запускается, когда элемент выбирается из значений результата. Использование клавиатуры для прокрутки и выбора элемента также приведет к событию «выбрать».

К сожалению, я не смог получить другие события, такие как «изменение», «закрыть» и «поиск», что означает, что если допустимое значение «foo», и пользователь просто набирает «foo», результат, базовое значение не устанавливается. То же самое верно, если пользователь выбрал «бар», а затем удаляет текст поиска - базовое значение остается «баром».

Если посмотреть на документацию по API, событие «изменения», предположительно, связано с событием «autocompletechange», но привязка к нему также не имеет никакого эффекта.

$('#my-select').combobox({ 
    change: function(event, ui){ 
     // does not fire 
     console.log('change', event, ui, $(this).val()); 
    }, 
    close: function(event, ui){ 
     // does not fire 
     console.log('close', event, ui, $(this).val()); 
    }, 
    search: function(event, ui){ 
     // does not fire 
     console.log('search', event, ui, $(this).val()); 
    }, 
    select: function(event, ui){ 
     // this will fire when a menu item is clicked 
     console.log('select', event, ui, $(this).val()); 
    } 
}); 

$('#my-select').on('autocompletechange', function(event, ui){ 
    // does not fire 
    console.log('autocompletechange', event, ui, $(this).val()); 
}); 

Смотрите не работает в этом jsFiddle: https://jsfiddle.net/s56n2pzz/

Я заметил, что событие обстрелял «изменение» событие имеет type из «comboboxselect» и originalEvent.type является «autocompleteselect», однако привязка к такие вещи, как «comboboxchange», тоже не работают.

ответ

0

Мне удалось выяснить проблему, посмотрев больше на событие «comboboxselect», которое появилось вместо «autocompleteselect». Код jQuery.widget, который создает combobox, обертывает автозаполнение и, следовательно, события. При ближайшем рассмотрении кода примера я вижу, что при запуске события «autocompleteselect» он запускает событие «select» на родительском combobox - передавая исходное событие.

Метод «autocompletechange» реализован, но он не запускает событие изменения родителя, проверяет, действительно ли вход действителен и не очищает значение, если он не ... кажется ошибка в примере?

Из примера, связанного с вопросом:

this._on(this.input, { 
    // "select" is fired on the combobox 
    autocompleteselect: function(event, ui) { 
     ui.item.option.selected = true; 
     this._trigger("select", event, { 
      item: ui.item.option 
     }); 
    }, 

    // change is NOT fired on the combobox 
    autocompletechange: "_removeIfInvalid" 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^