Вы столкнулись с этой проблемой, потому что ваше событие всегда ожидает изменения по переключателю. И когда вы выбираете новую радиокнопку, событие срабатывает на эту радиокнопку.
так что давайте посмотрим глубже.
if (this.checked) {
$('.sb-isGuiltyTypeDiv').show();
} else {
$('.sb-isGuiltyTypeDiv').hide();
}
Приведенный выше код выполняется каждый раз, когда выбирается переключатель. Но когда он выбран, он всегда проверяется, поэтому, почему всегда отображается переключатель, он никогда не попадет в ложный раздел вашего блока if.
попробуйте поместить консольный журнал над оператором if. console.log(this.checked)
и осмотрите вывод, вы увидите, что он всегда верен.
Что вы должны сделать, так это посмотреть значение выбранной радиокнопки, как блок кода ниже.
$('.sb-isReward').on('change', function (e) {
if (e.target.value === "True") {
$('.sb-isRewardTypeDiv').show();
} else {
$('.sb-isRewardTypeDiv').hide();
}
}).trigger('change');
Я также заметил, что ваши селекторы для элементов были неправильными. Не уверен, что это было сделано намеренно, но я также изменил его в коде.
Вот кодовое перо рабочего примера: https://codepen.io/anon/pen/gNYYjL
Надеюсь, это поможет.