Заполнить селектор выбора на событии live-search

Я использую селектор выбора ( https://silviomoreto.github.io/bootstrap-select/examples/), который я заполняю из API остальных.

На данный момент у меня есть только 30 записей. Однако это число будет расти очень скоро. Я хочу начать с пустого средства выбора, а затем, когда пользователь вводит некоторый текст в поле ввода в режиме реального времени поиска, я заполняю средство выбора только соответствующими элементами.

например, если пользователь пишет "al", я заполнил свой селектор выбора записями, содержащими "al". К сожалению, этот класс не содержит событий в режиме реального времени поиска. Не могли бы вы предложить другой класс?

Любой вклад поможет

С уважением

4 ответа

Вам понадобится JavaScript.

Вот пример использования jquery:

сначала в HTML вам нужно обернуть ваш элемент select в div с id, чтобы вы могли использовать его ввод с помощью класса управления формой

<div id="my-div">
    <select id="my-select" class="selectpicker" data-live-search="true"></select>
</div>

Теперь в файле javascript вам нужно будет сделать следующее

$('#my-select').selectpicker('refresh');
$('#my-div .form-control').on('keyup', function () {
    //here you listen to the change of the input corresponding to your select
    //and now you can populate your select element


    $('#my-select').append($('<option>', {
        value: 'any value',
        text: 'any text'
    }));
    $('#my-select').selectpicker('refresh');
});

Поскольку boostrap-select (or selectpicker) пока не поддерживает, я нашел обходной путь.

Это не лучшая практика, но она работает.

 $('#youselectpicker').on('loaded.bs.select', function (e, clickedIndex, isSelected, previousValue) {
        $(".youselectpicker .bs-searchbox input").on('keyup',function(){
            //place your code here
            //don't forget to refresh the select picker if you change the options
        })
      });

Моя простая реализация jQuery, которая работает.

    jQuery("select[name='select picker name']").siblings().find("input[type='text']").keyup(function (e) {
        if(e.keyCode==13){
           //Code to implement ajax search
        }
    });

Для меня только это сработало в конце:

Объединив некоторые из ответов здесь, мой обходной путь прослушивает нажатие кнопки раскрывающегося списка, которая является событием show.bs.select в начальной загрузке, а затем прослушивает ввод в поле ввода, содержащееся в div (my_select_outer) я поместил весь раздел selectpicker. Это поле ввода создается начальной загрузкой при нажатии на selectpicker.

          $('#my_select').on('show.bs.select',
      function(e) {
            $('#my_select_outer .form-control').on('input', function() {
                $('#my_select').empty();
                $('#my_select').selectpicker('refresh');
                let contains = $('#my_select_outer .form-control').val();
                // run API call based on 'contains'
                });
          })
    });
Другие вопросы по тегам