Вы должны привязаться к событию input
вместо события change
(которое запускается, когда была выбрана новая опция и фокусируется на другом элементе). Как сказано в do c, событие change
не обязательно запускается для каждого изменения значения элемента.
Используйте событие input
, например ниже:
$('#document').on('input', function () {...});
Например:
$(document).ready(function () {
$('#document').on('input', function () {
console.log("changed");
document.getElementById("tributeSelected").value = "";
var x = $("#doc option[value='" + $('#document').val() + "']").attr('id');
var data = JSON.parse('[{"TributeTypeID":"TributeTypeID1", "TributeName":"TributeTypeName1"},{"TributeTypeID":"TributeTypeID4", "TributeName":"TributeTypeName4"}]');
var result = [];
var search = "TributeTypeID";
for (var i = 0; i < data.length; i++) {
if (data[i][search] == x) {
result.push(data[i].TributeName);
}
}
var options = '';
for (var i = 0; i < result.length; i++) {
options += '<option value="' + result[i] + '"></option>';
}
document.getElementById('tribute').innerHTML = options;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<label>Select a document type:</label><input list="doc" id="document" name="Document" />
<datalist id="doc" name="Doc" placeholder="Please select a document type">
<option id="TributeTypeID1" value="TributeTypeName1"></option>
<option id="TributeTypeID2" value="TributeTypeName2"></option>
<option id="TributeTypeID3" value="TributeTypeName3"></option>
<option id="TributeTypeID4" value="TributeTypeName4"></option>
</datalist>
<label>Select a tribute type:</label><input list="tribute" id="tributeSelected" name="Tribute" />
<datalist id="tribute"></datalist>