Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2016, 19:38
Новичок на форуме
Отправить личное сообщение для amjke Посмотреть профиль Найти все сообщения от amjke
 
Регистрация: 17.02.2016
Сообщений: 2

jQuery validation
Скрипт состоит из двух функций:

Проблематика:
После загрузки страницы при пустых полях при первом нажатии на отправку формы запускается функция ajax() и вместо того, чтобы валидация val1() выдала значение false - она выдает значение true (m=0) и происходит дальнейшее выполнение функции ajax() - он лезет в send.php и возвращается с ошибкой.
При повторной попытке нажать на кнопку отправки формы валидация работает правильно, меняет значение m на 1 и показывает пользователю, что поля заполнены неправильно.

Нутром чую, что-то не так с переменной m. Можно ли вообще от нее избавиться?


Что нужно поменять в коде, чтобы при первом запуске валидация работала правильно?

function ajax() { //Ajax отправка формы
t=val1();
if (t===true) {
    var name = $("#name").val();
    var mail = $("#mail").val();
    var phone = $("#phone").val();
	//if (name <> NULL and )
    $.ajax({
        type: "POST",
        data: {name: name, mail: mail, phone: phone} ,
        url: "./send.php",
       success: function(data) {
		 
            $("#name").val('');
            $("#mail").val('');
            $("#phone").val('');
			
			$("#topresults").fadeIn();
            $("#topresults").html(data).delay(2000).fadeOut("slow");

           
        },
        error:  function(xhr, str){
            alert("Возникла ошибка!");
        }
    });
}
}

function val1(){ //Валидация формы
var m=0;

    $("#topfforma").validation(
        $("#name").validate({
            test: "blank letters", 
             invalid: function(){
				 m=1;
				//alert(m);
                if($(this).nextAll(".error").notExists()) {
                    $("#name").after('<div class="error">Введите корректное имя</div>');
                    $(this).nextAll(".error").delay(2000).fadeOut("slow");
                    setTimeout(function () {
                        $("#name").next(".error").remove();
                    }, 2600);
                }
            },
            valid: function(){
                $(this).nextAll(".error").remove();
            }
        }),
        $("#mail").validate({
            test: "blank email",
             invalid: function(){
				 m=1;
                if($(this).nextAll(".error").notExists()) {
                    $(this).after('<div class="error">Введите корректный email</div>');
                    $(this).nextAll(".error").delay(2000).fadeOut("slow");
                    setTimeout(function () {
                        $("#mail").next(".error").remove();
                    }, 2600);
                }
            },
            valid: function(){
                $(this).nextAll(".error").remove();
            }
        }),
       
        $("#phone").validate({
            test: "blank", 
             invalid: function(){
				 m=1;
                if($(this).nextAll(".error").notExists()) {
                    $(this).after('<div class="error">Введите телефон</div>');
                    $(this).nextAll(".error").delay(2000).fadeOut("slow");
                    setTimeout(function () {
                        $("#phone").next(".error").remove();
                    }, 2600);
                }
            },
            valid: function(){
                $(this).nextAll(".error").remove();
            }
        })
    );
	if (m==0) { return true;} else {return false; }
}
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2016, 19:59
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Удалить конечно можно, а смысл? Надо разбираться, почему при пустых name и тд не срабатывает колбэк invalid. Скрипт непосредственной валидации надо.
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2016, 20:37
Новичок на форуме
Отправить личное сообщение для amjke Посмотреть профиль Найти все сообщения от amjke
 
Регистрация: 17.02.2016
Сообщений: 2

Сообщение от destus Посмотреть сообщение
Удалить конечно можно, а смысл? Надо разбираться, почему при пустых name и тд не срабатывает колбэк invalid. Скрипт непосредственной валидации надо.
При абсолютно любых полях первый раз скрипт валидации не срабатывает. При повторении все ок.

Валидация через jQuery идет, как я понимаю
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2016, 20:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Сообщение от amjke Посмотреть сообщение
При абсолютно любых полях первый раз скрипт валидации не срабатывает. При повторении все ок.

Валидация через jQuery идет, как я понимаю
А проверку на загрузку DOM делаете, прежде чем вызывать функцию?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема совместного использования Masked Input и jQuery Validation spo jQuery 41 13.04.2016 16:10
валидация полей через jquery validation. avanesov89 Общие вопросы Javascript 1 01.11.2015 21:44
jQuery Validation Plugin для валидации динамических input'ов evtyshenkosemen jQuery 15 18.08.2015 14:43
jquery validation form - событие окончания отправки Porolon AJAX и COMET 2 10.09.2011 00:56
Проблемы с jQuery Validation maximale jQuery 2 23.08.2011 15:21