Проблема в том, что вы вкладываете обработчики событий. Чтобы устранить проблему, разделите логи c, чтобы включить кнопку на основе выбранного радио в обработчике событий change
. Затем создайте отдельный обработчик для отправки формы, который проверяет, установлен ли переключатель «Согласен», и предотвращает событие, если нет. Попробуйте это:
var $radios = $('input[type="radio"][name="choice"]').change(function() {
$('#submit').prop('disabled', $(this).val() === 'Disagree');
});
$('#yourForm').on('submit', function(e) {
if ($radios.filter(':checked').val() !== 'Agree') {
e.preventDefault();
console.log('disagree checked, form submission cancelled');
} else {
console.log('submitting form...');
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="yourForm">
<label>
<input type="radio" name="choice" value="Agree" id="agree_radio">
Agree
</label>
<label>
<input type="radio" name="choice" value="Disagree" id="disagree_radio">
Disagree
</label>
<button type="submit" class="btn btn-success" name="btn" value="resp_form" disabled="disabled" id="submit">Submit</button>
</form>
Теоретически, форму никогда не следует отправлять, когда проверено «Не согласен», поскольку кнопка отключена, но люди все равно могут связываться с инспектором DOM или нажимать вернитесь к входным данным, чтобы отправить форму, поэтому лучше охватить возможные случаи.