У меня есть javascript, включая вызов ajax, который принимает пустой ввод данных и использует то, что пользователь вводит для запроса объекта json. Он успешно возвращает соответствующие объекты и отображает их в списке данных.
Это все работает нормально, но теперь я пытаюсь убедиться, что, когда они нажимают на опцию списка, я получаю определенные поля ТОЛЬКО от этой выбранной опции, чтобы я мог в конечном итоге отправить их в форму.
Когда нажата опция, я получаю нужное значение в своей консоли (console.log(searchResult[i]._source.frm.grp.Name)
), но оно дает мне каждый из предыдущих объектов, где я просто хочу получить данные от одного нажатого.
Я думаю, это может быть связано с тем фактом, что я выполняю эту функцию в цикле for или что-то связано с моим индексированием с использованием [i], но я не могу точно определить это.
Как сделать так, чтобы это влияло только на значения индексируемого объекта, по которому щелкают?
<script type="text/javascript">
//input event handler
$('#productInput').on('input', function(){
if($(this).val() === ''){
return;
}else{
const searchResult = $(this).val();
$.ajax({ url: '/account/autocomplete',
data: {
search_result:searchResult
},
"_token": "{{ csrf_token() }}",
type: "POST",
success: function(response){
$('#returnedProducts').empty();
let searchResult = response.hits.hits;
for(let i = 0; i < searchResult.length; i++) {
$("#returnedProducts").append("<option value=" + searchResult[i]._source.category + ">" + searchResult[i]._source.category + "</option>");
//Issue starts here//
$("#productInput").on('input', function(){
var val = this.val = this.value;
if($('#returnedProducts option').filter(function(){
return this.value === val;
}).length){
document.getElementById("grpName").value = searchResult[i]._source.frm.grp.grp_name;
document.getElementById("grpNum").value = searchResult[i]._source.frm.grp.grp_code;
}
})
}
}
});
}
});
</script>
<form>
<input id="grpName">
<input id="grpNum">
</form>