#jquery #ajax #input
#jquery #ajax #ввод
Вопрос:
В моем проекте я использую выпадающее меню (bootstrap 4) при вводе текста пользователем, чтобы предоставить список выбираемых элементов.
HTML-код выглядит следующим образом:
<div class="dropdown">
<input type="hidden" id="ad_id" name="ad_id" value="">
<label for="aerodrome" class="control-label">Aerodrome</label>
<input type="text" class="form-control" id="aerodrome" name="aerodrome" autocomplete="off" placeholder="Search Aerodrome by name, ICAO or IATA code">
<ul class="dropdown-menu txtaerodrome" role="menu" aria-labelledby="dropdownMenu" id="DropdownAerodromes"></ul>
</div>
При вводе #aerodrome скрипт AJAX извлекает данные с удаленного сервера и заполняет неупорядоченный выпадающий список следующим кодом:
$('#DropdownAerodromes').append(`<li role="presentation" class="dropdown-item"><a role="menuitem dropdownAerodromesli" class="dropdownlivalue" data-id="${value.ad_id}">${value.name} ${value.municipality} (${value.icao}/${value.iata})</a></li>`);
Я хотел бы заполнить поле ввода #аэродром и скрытый #ad_id выбранным элементом li в выпадающем меню при размытии ввода (например, когда пользователь нажимает клавишу tab, а в выпадающем списке есть выбранная запись)
Приветствуется любая помощь в решении этой проблемы (для меня); большое спасибо
Ответ №1:
Я собрал небольшую скрипку. Это отдельный выпадающий список, которого нет во входных данных, но я думаю, что это то, что вы хотели. https://jsfiddle.net/5d3xkzs0/1 /
// for keypresses current only tab
// for more keys check https://keycode.info/
$('#DropdownAerodromes').on('keyup', 'li',function(e){
e.preventDefault();
var code = e.keyCode || e.which;
if (code == 9) { // 9 = tab
var selected_li = $(this).find('a').html();
$('#ad_id').val(selected_li);
$('#aerodrome').val(selected_li);
}
});
// for normal clicks
$('#DropdownAerodromes li').on('click',function(e){
e.preventDefault();
var selected_li = $(this).find('a').html();
$('#ad_id').val(selected_li);
$('#aerodrome').val(selected_li);
});
РЕДАКТИРОВАТЬ!
Хорошо, я понимаю, что вы имеете в виду / хотели. Создал еще одну скрипку с изменениями, надеюсь, это должно быть хорошо. После того, как вы начнете писать, появится выпадающий список. Вы можете использовать стрелки вверх / вниз для навигации и использовать tab / enter для выбора элемента для вставки в поле. Также работает щелчок. В function populate_field()
вы найдете дополнительные data-id
и data-aircraftid
.
Комментарии:
1. Большое спасибо за помощь Mikeyhun …. поскольку каждый элемент li имеет идентификатор данных и атрибут data-aircraftId … могу ли я получить их при щелчке по каждому li или при возникновении события размытия поля ввода (например, клавиша табуляции)?
2. @Federico Я обновил свой ответ новой скрипкой. Проверьте это. Надеюсь, это поможет
Ответ №2:
Извините, но я не могу заставить приведенный выше код работать нормально…это потому, что выпадающий список, который у меня есть в моем проекте, работает как список с автоматическим предложением, когда пользователь вводит ввод field…so например, при поиске названия аэродрома выпадающий список будет заполнен соответствующими аэродромами. На этом этапе, используя клавишу up / down, пользователь должен выбрать правильный элемент в списке … и на этом этапе, нажав клавишу tab или нажав на элемент выбора, соответствующие данные должны заполнить поле ввода и скрытый ввод. Еще раз спасибо за любую подсказку