HTML, JS, Thymeleaf. Есть ли способ заполнить 3 поля input одновременно согласно ФИО, но ФИО это выпадающий список
<div class="DivRequest">
<input class="inn" type="text" th:value="${el.fname}" onkeyup="checkParamsEdit()" id="fnameEdit" name="fname" placeholder="Фамилия">
</div>
<div class="DivRequest">
<input class="inn" type="text" th:value="${el.lname}" onkeyup="checkParamsEdit()" id="lnameEdit" name="lname" placeholder="Имя">
</div>
<div class="DivRequest">
<input class="inn" type="text" th:value="${el.pname}" onkeyup="checkParamsEdit()" id="pnameEdit" name="pname" placeholder="Отчество">
</div>
<div class="DivRequest">
<select class="inn" onchange=document.getElementById('pnameEdit').value=this.options[this.selectedIndex].value>
<option disabled selected >ФИО исполнителя</option>
<option
th:each="staff : ${staffs}"
th:value="${staff.lname}+ ' ' +${staff.fname}+ ' ' +${staff.pname}"
th:text="${staff.lname}+' '+${staff.fname}+' '+${staff.pname}">
</option>
</select>
</div>
У меня проект на Spring-Boot с шаблонизатором thymeleaf. В выпадающий список я передаю ФИО из базы данных. Далее, при выборе/клике по ФИО я хочу чтобы оно передавалось в input. В поле фамилия - фамилия, имя - имя и отчество - отчество.
Что можно с этим сделать, куда копать? Можно ли как-то через JS пронумеровать и заполнять. Например 1-й элемент идет в input "Фамилия" 2-ой в "Имя" и 3-й в "Отчество
P.S. Сейчас у меня при клике на ФИО из списка заполняется только один input "Отчество", оно и понятно, так как id указан. Но что можно сделать с остальными полями?

Ответы (1 шт):
Автор решения: nazarpunk
→ Ссылка
Добавьте в option нужные data-* аттрибуты.
<option
th:each="staff : ${staffs}"
th:value="${staff.lname}+ ' ' +${staff.fname}+ ' ' +${staff.pname}"
th:text="${staff.lname}+' '+${staff.fname}+' '+${staff.pname}"
th:attr="data-lname=${staff.lname},data-fname=${staff.fname},data-pname=${staff.pname}"
>
</option>
Чтоб после генерации получилось нечто подобное:
const $fname = document.querySelector('[name=fname]');
const $lname = document.querySelector('[name=lname]');
const $pname = document.querySelector('[name=pname]');
document.querySelector('select').addEventListener(`change`, e => {
const $option = e.target.options[e.target.selectedIndex];
$fname.value = $option.dataset.fname;
$lname.value = $option.dataset.lname;
$pname.value = $option.dataset.pname;
});
input {
display: block;
}
<input type="text" name="fname" placeholder="Фамилия">
<input type="text" name="lname" placeholder="Имя">
<input type="text" name="pname" placeholder="Отчество">
<select>
<option disabled selected hidden>ФИО исполнителя</option>
<option data-fname="Иванов" data-lname="Иван" data-pname="Иванович">Иванов Иван Иванович</option>
<option data-fname="Петров" data-lname="Пётр" data-pname="Петрович">Петров Пётр Петрович</option>
<option data-fname="Сидоров" data-lname="Сидр" data-pname="Сидорович">Сидоров Сидр Сидорович</option>
</select>