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; } } |
Удалить конечно можно, а смысл? Надо разбираться, почему при пустых name и тд не срабатывает колбэк invalid. Скрипт непосредственной валидации надо.
|
Цитата:
Валидация через jQuery идет, как я понимаю |
Цитата:
|
Часовой пояс GMT +3, время: 10:04. |