@pofeg

Как запретить переход на страницу если валидатор на jquery выдает ошибку?

Есть вот такой просто валидатор формы регистрации(написан под cms):
$(document).ready(function check_reg_daten() {
	$('#name').focusout(function CheckLogin(){
		var name = document.getElementById('name').value;
		$.post(dle_root + "engine/ajax/controller.php?mod=registration", { name: name, user_hash: dle_login_hash }, function(data){
			if (data !== 'das') {
				$('#name').addClass(' is-invalid');
				$('[for=name]').html(data).addClass('text-danger');
				setTimeout(function(){ $('[for=name]').text('Придумайте логин').removeClass('text-danger')},8000);
			} else {
				$('#name').removeClass(' is-invalid');
				$('#name').addClass(' is-valid');
			}
		});
	});
	$('#email').focusout(function CheckEmail(){
		var email = document.getElementById('email').value;
		$.post(dle_root + "engine/ajax/controller.php?mod=registration", { email: email, user_hash: dle_login_hash }, function(email){
			if (email !== 'dae') {
				$('#email').addClass(' is-invalid');
				$('[for=email]').html(email).addClass('text-danger');
				setTimeout(function(){ $('[for=email]').text('E-mail адрес').removeClass('text-danger')},8000);
			} else {
				$('#email').removeClass(' is-invalid');
				$('#email').addClass(' is-valid');
			}
		});
	});
	$('#registration').submit(function() {
		if ($('#name').val().match(/[!"#$%&'()*+,.\/:;<=>?@[\\]^`{|}~]/g, "\\$&")) {
			$('#name').addClass(' is-invalid');
			$('[for=name]').html('{$lang['reg_err_4']}').addClass('text-danger');
			setTimeout(function(){ $('[for=name]').text('Придумайте логин').removeClass('text-danger')},8000);
		}
		if ($('#name').val().length <= 3) {
			$('#name').addClass(' is-invalid');
			$('[for=name]').html('{$lang['reg_err_3']}').addClass('text-danger');
			setTimeout(function(){ $('[for=name]').text('Придумайте логин').removeClass('text-danger')},8000);
		}
		if ($('#name').val().length > 40) {
			$('#name').addClass(' is-invalid');
			$('[for=name]').html('{$lang['reg_err_3']}').addClass('text-danger');
			setTimeout(function(){ $('[for=name]').text('Придумайте логин').removeClass('text-danger')},8000);
		}
		var pass1 = $('#password1').val();
		var pass2 = $('#password2').val();
		if (pass1 != pass2) {
			$('#password2').addClass(' is-invalid');
			$('#password1').addClass(' is-invalid');
			$('[for=password2]').html('{$lang['reg_err_1']}').addClass('text-danger');
			setTimeout(function(){ $('[for=password2]').text('Повторите свой пароль').removeClass('text-danger')},8000);
		} else {
			$('#password2').removeClass(' is-invalid');
			$('#password1').removeClass(' is-invalid');
		}
		if ($('#password1').val().length < 6) {
			$('#password1').addClass(' is-invalid');
			$('[for=password1]').html('{$lang['reg_err_2']}').addClass('text-danger');
			setTimeout(function(){ $('[for=password1]').text('Введите пароль').removeClass('text-danger')},8000);
		}
		if ($('#password1').val().length > 72) {
			$('#password1').addClass(' is-invalid');
			$('[for=password1]').html('{$lang['reg_err_2']}').addClass('text-danger');
			setTimeout(function(){ $('[for=password1]').text('Введите пароль').removeClass('text-danger')},8000);
		}
	});
	return true;
});


И есть вот такая форма:
<form  method="post" name="registration" onsubmit="if (check_reg_daten()) {return false;};" id="registration" action="">
тут поля для ввода информации
</form>


Но почему-то функция check_reg_daten не работает и при наличии ошибок в форме всё равно переходит на следующую страницу, хотя не должен.
Знаю что причина в return false но я не понимаю по какому принципу она работает.
Как заставить работать этот валидатор вместе с функцией check_reg_daten ?

P.S: Был раньше вот такой валидатор:
function check_reg_daten () {
	if(document.forms.registration.name.value == '') {
		DLEalert('{$lang['reg_err_30']}', dle_info);return false;
	}
	if(document.forms.registration.password1.value.length < 6) {
		DLEalert('{$lang['reg_err_31']}', dle_info);return false;
	}

	if(document.forms.registration.password1.value != document.forms.registration.password2.value) {
		DLEalert('{$lang['reg_err_32']}', dle_info);return false;
	}
	if(document.forms.registration.email.value == '') {
		DLEalert('{$lang['reg_err_33']}', dle_info);return false;
	}
return true;
};

И он работает а мой на jq не работает. Почему ?
Заранее спасибо всем!
  • Вопрос задан
  • 38 просмотров
Решения вопроса 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Потому, что ошибка идет с самой первой строки:
$(document).ready(function check_reg_daten() { ...
Нужно как-то так:
function check_reg_daten() { ... }
$(document).ready(check_reg_daten);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы