Проверка jQuery по сложному правилу: отключается автоматически, когда это не применимо, но не при запуске - PullRequest
0 голосов
/ 22 мая 2019

В приведенном ниже скрипте у меня есть сложное правило 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>

1 Ответ

1 голос
/ 22 мая 2019

"Моя цель: (1) не представлять ошибку изначально, поскольку пользователь выбирает типы. (2) Если ошибка получена после отправки, переключение на тип1 должно автоматически ее скрывать."

Поэтому поместите ваш обработчик change в обработчик click, чтобы ваши переключатели игнорировались до первого нажатия кнопки "Отправить".

$('#submitForm').on('click', function() {

    $('#myform').valid();

    $('[name="type"]').on('change', function() {
        $('[name="comments"]').valid();
    });

});

DEMO: jsfiddle.net / 5hdoc2wv / 2 /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...