Вам просто нужно изменить прослушиватель событий для входа completetasks
вместо eodSumButton
.В противном случае код проверяет только то, когда вы пытаетесь отправить:
$(document).ready(function(){
$("#completetasks").on('change',function () {
if ($("#completetasks").val() == "Yes"){
console.log("NOT required");
$("#eoddesc").removeAttr("required");
}
if ($("#completetasks").val() == "No"){
console.log("required");
$("#eoddesc").attr("required");
}
})
});
Проблема в том, что «обязательное» оценивается перед отправкой.Поэтому, когда вы нажимаете «Отправить», он видит поле как «не обязательное», а затем добавляет требуемый атрибут.
РЕДАКТИРОВАТЬ: Я думаю, я выяснил вашу проблему:
$(document).ready(function(){
$("#completetasks").click(function () {
if ($("#completetasks").val() == "Yes"){
$("#output").html("NOT required");
$("#eoddesc").removeAttr("required");
}
if ($("#completetasks").val() == "No"){
$("#output").html("required");
$("#eoddesc").prop("required",true);
}
})
});
При использовании «атрибутов», таких как required
и checked
, Jquery считает их property
, поэтому для добавления «обязательных» используйте .prop
.Но для удаления вы все равно используете removeAttr
.Я надеюсь, что это решит вашу проблему.
Исправлено, комментарий Бхарата Геледы - верный правильный ответ.