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, время: 05:05. |