Это происходит потому, что каждый раз, когда ваш код запускает событие изменения для fld_CaseType, он добавляет дополнительные прослушиватели событий для fld_Severity. так что если вы изменили fld_CaseType 5 раз, то 5 слушателей событий прослушали бы изменение, означающее, что код будет выполнен 5 раз (один раз для каждого слушателя событий).
Чтобы исправить это, вам нужно удалить любой слушатель события 'change' из fld_Severity с помощью функции jquery .off () перед добавлением нового.
$("#fld_Severity").off("change");
Я создал рабочий фрагмент ниже:
$("#fld_Severity").hide();
$("#fld_CaseType").on("change", function() {
if ($("#fld_CaseType").children("option:selected").val() == 26) {
$('#fld_Severity').val('0');
$("#fld_Severity").show();
$("#fld_Severity").off("change"); //remove on change event listener
$("#fld_Severity").on("change", function() {
console.log("Severity looped.");
});
}
if ($("#fld_CaseType").children("option:selected").val() == 30) {
$("#fld_Severity").hide();
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="fld_CaseType" name="case_type" data-stop-refresh="true">
<option value="0" selected>Select a case type ...</option>
<option value="26">Case type 1</option>
<option value="30">Case Type 2</option>
</select>
<select id="fld_Severity" name="severity_id" data-stop-refresh="true">
<option value="0">Select a severity ...</option>
<option value="4">Severity 1</option>
<option value="3">Severity 2</option>
</select>
В качестве альтернативы вы можете просто переместить код прослушивателя событий за пределы события изменения для fld_CaseType, чтобы он вызывался только один раз
например.
$("#fld_Severity").on("change", function() {
console.log("Severity looped.");
});
$("#fld_CaseType").on("change", function() {
if ($("#fld_CaseType").children("option:selected").val() == 26) {
$('#fld_Severity').val('0');
$("#fld_Severity").show();
}
if ($("#fld_CaseType").children("option:selected").val() == 30) {
$("#fld_Severity").hide();
}
});