У меня есть два списка данных в приведенном ниже фрагменте, и значения выбранного параметра должны отображаться рядом с ними.
Мой первый (аккаунт) работает нормально, а второй (главный) не работает. Значение не выбирается для Head.
/*List function starts*/
document.querySelector('input[list]').addEventListener('input', function(e) {
var input = e.target,
list = input.getAttribute('list'),
options = document.querySelectorAll('#' + list + ' option'),
hiddenInput = document.getElementById(input.getAttribute('id') + '-hidden'),
inputValue = input.value;
hiddenInput.value = inputValue;
for (var i = 0; i < options.length; i++) {
var option = options[i];
if (option.innerText === inputValue) {
hiddenInput.value = option.getAttribute('data-value');
break;
}
}
});
/*List function ends*/
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for = "accntid">Account: </label>
<input id = "accntid" name = "taccntlist" list = "accnt_list" value = "" placeholder = "Account" required />
<datalist id = "accnt_list">
<option data-value = "001">Dummy1</option>
<option data-value = "0000000">Dummy</option>
</datalist>
<input type = "text" name = "txtaccnt" id = "accntid-hidden" readonly>
<br /><br /><br />
<label for = "headid">Head: </label>
<input id = "headid" name = "txtheadlist" list = "head_list" value = "" placeholder = "Head" required />
<datalist id = "head_list">
<option data-value = "1">d1</option>
<option data-value = "0000000000">dummy</option>
</datalist>
<input type = "text" name = "txthead" id = "headid-hidden" readonly>
<br /><br /><br />
Я изменил ваш js код, и добавил метод forEach()
, предварительно объявив вызов инпутов вот так:
let inputs = document.querySelectorAll('input[list]');
Это означает, что e.target
больше не нужно использовать.
let inputs = document.querySelectorAll('input[list]');
inputs.forEach(function(current, index) {
current.addEventListener('input', function() {
list = current.getAttribute('list'),
options = document.querySelectorAll('#' + list + ' option'),
hiddenInput = document.getElementById(current.getAttribute('id') + '-hidden'),
inputValue = current.value;
hiddenInput.value = inputValue;
for (var i = 0; i < options.length; i++) {
var option = options[i];
if (option.innerText === inputValue) {
hiddenInput.value = option.getAttribute('data-value');
break;
}
}
});
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for = "accntid">Account: </label>
<input id = "accntid" name = "taccntlist" list = "accnt_list" value = "" placeholder = "Account" required />
<datalist id = "accnt_list">
<option data-value = "001">Dummy1</option>
<option data-value = "0000000">Dummy</option>
</datalist>
<input type = "text" name = "txtaccnt" id = "accntid-hidden" readonly>
<br /><br /><br />
<label for = "headid">Head: </label>
<input id = "headid" name = "txtheadlist" list = "head_list" value = "" placeholder = "Head" required />
<datalist id = "head_list">
<option data-value = "1">d1</option>
<option data-value = "0000000000">dummy</option>
</datalist>
<input type = "text" name = "txthead" id = "headid-hidden" readonly>
<br /><br /><br />