В приведенном ниже скрипте у меня есть сложное правило jQuery-Validate, которое срабатывает, если «Комментарии» не указаны специально для «Типа 2», но не в любом другом случае.
В большинстве случаев jQuery Validate автоматически скрывает сообщения, поскольку ошибки исправляются до повторной отправки формы. В этом сложном правиле после получения ошибки, если вы вернетесь к «Типу 1», ошибка не исчезнет.
Я пытался заставить .valid()
в "Комментариях" на событии радиостанции change()
. Но это имеет тот недостаток, что при первом выборе «Тип 2» вы автоматически видите ошибку до того, как что-либо введено.
Моя цель: (1) Не показывать ошибку изначально, когда пользователь выбирает Типы. (2) Если ошибка получена после отправки, переключение на тип 1 должно автоматически ее скрыть.
Коррекция автоматического скрытия должна заключаться в наборе чего-либо (это работает правильно), или переключении переключателя.
jQuery.validator.addMethod("chkType2Comments",checkType2Comments);
$("#myform").validate({
rules: {
"comments": {
chkType2Comments: true
}
},
messages: {
"comments" : {
chkType2Comments: "Comments required"
}
}
});
function checkType2Comments() {
var type = $('input[name="type"]:checked').val();
if (type == '2') {
if ($('input[name=comments]').val().trim() == '') {
return false;
}
}
return true;
}
$('#submitForm').click(function() {
$('#myform').valid();
})
// Radiobutton switching -- if I remove this, the error doesn't go away on switching back.
// But if I leave this code, the error comes up immediately.
// Goal: Error not initially shown, but if Type is switched afterwards, auto-turned off.
/*
$('input[name=type]').change(function() {
$('input[name=comments]').valid();
});
*/
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js"></script>
<form id="myform">
<input type="radio" name="type" value="1" /> Type 1 <br/>
<input type="radio" name="type" value="2" /> Type 2 <br/>
<input type="text" name="comments" />
<input type="button" id="submitForm" value="submit"/>
</form>