535
 

Проверка данных форм - jQuery Validation Plugin

Проверка данных форм это чрезвычайно важная процедура для повышения “юзабилити” при работе с формами. В первую очередь потому, что пользователь сразу же получает уведомление в том случае, если какие либо данные введены неверно. Сегодня я расскажу об очень полезном плагине для jQuery, который облегчает задачу проверки введенных данных до минимума. Это jQuery Validation Plugin. Вот некоторые его возможности:

  1. Способен проверять значения email, URL, числа, цифры, номера кредитных карт, минимальное и максимальное значения и др.
  2. Поддержка удаленной проверки используя AJAX.
  3. Автоматическое отображение сообщений об ошибках.

Итак, попробуем скрипт в действии. Допустим, нам необходимо создать простую форму для логина пользователя, в которой есть 3 поля - имя пользователя, пароль и checkbox “запомнить”.

<form name="myForm" id="myForm" action="" method="post" style="margin:20px">
	<label for="username">Имя пользователя </label><br/>
	<input type="text" name="username" value="" /><br/>
	<label for="password">Пароль</label><br/>
	<input type="password" name="password" value="" /><br/><br/>
	<label for="remember">Запомнить меня:</label>
	<input type="checkbox" name="remember" /><br/><br/>
	<input type="submit" name="" value="Submit" />
</form>

Для начала нам понадобится подключить библиотеку jQuery и плагин в страницу:

<script src="../lib/jquery.js" type="text/javascript"></script>
<script src="../lib/jquery.delegate.js" type="text/javascript"></script>
<script src="../jquery.validate.js" type="text/javascript"></script>

Теперь можно вызывать функцию jQuery.validate() которая инициализирует форму. В качестве атрибута в функцию нужно передать объект, содержащий правила (rules) и сообщения об ошибках (messages) для каждого проверяемого поля:

$().ready(function(){
	$("#myForm").validate({
		rules : {
			username : {required : true, minlength: 2},
			password : "required"
		},
		messages : {
			username : {
				required : "Введите ваше имя",
				minlength : "Введите не менее, чем 2 символа."
			},
			password : "Введите пароль"
		}
	});
});

Здесь все довольно таки просто. Селектор $(”#myForm”) получает указатель на форму, а функция validate() устанавливает правила для полей в соответствии с полученными данными. Объект rules содержит имя поля и список правил. Если правил несколько, то они должны быть объединены в отдельный объект. Так, для поля пароль просто указано правило “required”, т.е. обязательное поле, в то время как для поля username указан объект содержащий два правила - required и minlength (минимально допустимое количество символов). Структура объекта messages такая же, как и для rules, за исключением того, что вместо атрибутов правил указаны сообщения об ошибках.

Если при отправке формы обнаружены ошибки, то форма не отправляется, а высвечивается сообщение об ошибке в виде тэга <lable> с классом error. Также класс error присваивается элементу input, вызвавшему ошибку. Воспользуемся этим чтобы ярко выделить это поле:

label.error {
	color: red;
	font-style: italic;
}
input.error {
	border: 1px dotted #f00;
}

Таким образом, сообщения об ошибках будут выделены красным курсивом, а рамка поля, вызвавшего ошибку, будет выделена красной прерывистой линией.

Демо этого примера можно посмотреть здесь.

Правила для полей можно также указывать и при помощи атрибутов полей как в следующем примере:

<input id="email" class="required email" maxlength="40" name="email" />

Еще один полезный атрибут это submitHandler, который позволяет устанавливать обработчик для события отправки формы. Очень удобно если вам, к примеру, нужно создать форму которая передает данные на сервер используя AJAX. Пример:

$("#form").validate({
	submitHandler: function(form) {
		jQuery(form).ajaxSubmit({
			target: "#result"
		});
	}
});

Теперь поговорим о том, как же пользоваться AJAX при проверке данных. К примеру, довольно распространенный пример, проверка доступности имени пользователя при регистрации. Допустим, у нас есть простейшая форма для регистрации:

<form name="myForm" id="myForm" action="" method="post" style="margin:20px">
	<label for="username">Имя пользователя</label>
<input type="text" name="username" value="" />
<label for="password">Пароль</label>
<input type="password" name="password" value="" /><br/><br/> <input type="submit" name="" value="Регистрация" /> </form>

Назначим для формы уже известные по предыдущему примеру правила required и minlength, но кроме этого, для поля username добавим правило remote со значением “test.php”. Таким образом мы указываем файл, к которому будет обращаться плагин для проверки данных. В запросе будет передаваться имя поля и его значение, т.е. так: test.php?username=vasia. В ответ скрипт должен вернуть результат проверки, если это false (простое текстовое значение), то высвечивается сообщение об ошибке:

$().ready(function(){
	$("#myForm").validate({
		rules : {
			username : {required : true, minlength: 2, remote : "test.php"},
			password : "required"
		},
		messages : {
			username : {
				required : "Введите ваше имя",
				minlength : "Введите не менее, чем 2 символа.",
				remote : "Это имя пользователя занято, выберите другое"
			},
			password : "Введите пароль"
		}
	});
});

Демо этого примера доступен здесь.

Еще один момент при работе с сообщениями об ошибках. В данном плагине доступны несколько файлов локализации, которые, при их подключении, добавляют локализованные сообщения об ошибках по-умолчанию. То есть если для какого либо поля вы не укажите сообщение об ошибке, то плагин покажет сообщение по умолчанию. Вы можете сами создать и подключить такой файл. Пример:

jQuery.extend(jQuery.validator.messages, {
        required: "Это поле необходимо заполнить",
        remote: "Исправьте это поле чтобы продолжить",
        email: "Введите правильный email адрес.",
        url: "Введите верный URL.",
        date: "Введите правильную дату.",
        dateISO: "Введите правильную дату (ISO).",
        number: "Введите число.",
        digits: "Введите только цифры.",
        creditcard: "Введите правильный номер вашей кредитной карты.",
        equalTo: "Повторите ввод значения еще раз.",
        accept: "Пожалуйста, введите значение с правильным расширением.",
        maxlength: jQuery.format("Нельзя вводить более {0} символов."),
        minlength: jQuery.format("Должно быть не менее {0} символов."),
        rangelength: jQuery.format("Введите от {0} до {1} символов."),
        range: jQuery.format("Введите число от {0} до {1}."),
        max: jQuery.format("Введите число меньше или равное {0}."),
        min: jQuery.format("Введите число больше или равное {0}.")
});

Плагин можно скачать здесь. Также к нему имеется документация.

Обновлено: минимальные требования для плагина jQuery-1.2.2.

До встречи!

Добавить в закладки:

Комментарии на “Проверка данных форм - jQuery Validation Plugin”

  1. Очень интересная статья.
    У меня возник вопрос о проверке имени пользователя. В вашем примере проверка выполняется после нажатия на кнопку “Регистрация”.
    Иногда удобнее чтобы эта проверка выполнялась при событии onchange в этом поле. Сделать это обычным способом (без библиотеки) несложно, достаточно написать обработчик. Но можно ли подключить эту функцию к библиотеке, т.е. чтобы при сабмите формы запрос отправлялся с данными из всех полей одному скрипту, а при обновлении поля с именем - другому (и только с данными из указанного поля)?

  2. Это мое упущение. На самом деле скрипт так и работает. Т.е. при изменении текста отправляются данные поля username скрипту test.php, как указано в директиве remote, а при сабмите данные идут в другой скрипт. Проблема в том, что у меня на сервере был установлен jQuery-1.2.1, в то время как минимальные требования для плагина это версия 1.2.2.
    Спасибо вам за замечание. Уже исправлено.

  3. Неразобрался где взять файл delegate.js
    По указаному линку
    Скачал 1.2.1, потом обновил до 1.2.2, но такого файла в дистрибутиве нет

  4. Этот плагин идет отдельно от дистрибутива:
    http://dev.jquery.com/browser/trunk/plugins/delegate/jquery.delegate.js?rev=4786

    его можно скопировать из моего демо примера:
    http://www.jstoolbox.com/js/jquery.delegate.js

  5. При использовании Validate натолкнулся на проблему, когда форма обрабатывается только после того, как ДВАЖДЫ нажимаешь на кнопку сабмит.
    может быть, проблема в том, что форму я генерю скриптом. стандартным вызовом validate (чере ойгукн document ready) форма не видится. Пришлось в onsubmit формы запихивать функцию, в которой используется validate и отправка через ajax
    Самое интересное, что такая бага замечена не только мной - в jquery group такая проблема тоже озвучивалась, но решения нет пока. а может, я что-то не так делаю?

  6. Трудно ответить на ваш вопрос не видя код. Если проблема в $.ready() и динамическом создании формы, то почему бы не добавить вызов validate() сразу после того как вы сгенерировали и добавили форму в DOM?

  7. форма генерируется после определенного действия юзера, код могу показать, но ссылку общедоступной делать не хочу. пока же лезу на стенку от невозможности определить, где ошибка…

  8. ну так покажите код, посмотрим, или вышлите мне на email

  9. Бруно Понтекорво 16 мая 2008 в 20:21

    Приветствую.
    Как вывести сообщение возле поля, если валидация прошла успешно? У меня remote проверяет email на сервере, если false то говорит что занято, а как что-то вывести если сервер возвращает true, мол все нормально?
    Спасибо.

  10. @Бруно Понтекорво

    Нужно добавить функцию-обработчик success примерно так:
    rules : { … },

    messages : { … },

    success: function(label) {
    var msg = ‘ ’;
    if (label.attr(’for’) == ‘username’)
    var msg = ‘Имя не занято’;
    label.html(msg).addClass(”checked”);
    }

    В атрибуте for сообщения об ошибке всегда хранится имя поля. Я просто определяю, если это к примеру username, то значит сообщение ‘Имя не занято’. Ну и плюс к этому лейблу добавляю класс checked.
    Хороший демо есть тут: http://jquery.bassistance.de/validate/demo/milk/

  11. Евгений 7 июня 2008 в 21:03

    Спасибо за статью, но появился вопрос.
    Как работать с массивом полей, т.е.: user[name], user[password] ?

  12. @Евгений
    Такие поля нужно указывать следующим образом:
    rules: {
    “user[name]“: “required”,
    “user[password]“: “required”

    }

    Кавычки здесь обязательны!

  13. А как сделать проверку даты в селектах на правильность. Что бы нельзя было выбрать например 31 сентября 2008 года. (в сентябре только 30 дней)?

  14. @Олег
    Увы, но такую проверку пока сделать невозможно :( . Разве что самому изменять функцию проверки правильности даты. Я только что посмотрел код, который реализует проверку для дат, оказывается там просто идет проверка по регулярным выражениям. Например, для функции dateISO() стоит проверка следующего выражения:
    /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/
    т.е. должен быть следующий формат даты: 2008-08-26, причем валидатор скажет что такая запись тоже верна: 2008-36-54, хотя это не так.
    Функция date() в свою очередь использует следующее выражение:
    !/Invalid|NaN/.test(new Date(value))
    … которое также не в состоянии определить “правильность” даты.
    Надеюсь в следующем релизе эту недоработку устранят.

  15. Тоже проблема с динамическим созданием формы и валидацией. Форма создается одна, но при изменении одного селекта, меняется содержимое формы (добавляются/удаляются инпуты, селекты и др.) Так вот, под каждое состояние формы своя валидация, которая выполняется при изменении состоянии все того же селекта, но некоторые поля не меняются, а правила для них да. Получается что при изменении содержания формы новые (добавленные) поля принимают новые правила, а поля, которые не изменились - правила не переопределяют. Вопрос - как переопределить правила для старых полей? Может кто подскажет?

  16. [...] Validation Plugin, о нем, кстати, написана очень хорошая статья Проверка данных форм. Для prototype тоже есть несколько аналогичных библиотек: [...]

  17. помгите плиз. очень срочно надо!…
    у мна есть формочка, но мне надо валидировать только несколько из ее текстовых полей; каждому нужному мне полю я даю id с именем правила(rules) по которому надо проводить проверку; при загрузке страници плагин “хочет” что бы у каждого елемента формы был id, в чем и состоит суть проблеммы(и пока это так форма не отправит данные).
    Сообщение из firebug:input type=”text” size=”5″ name=”sf_code2″ value=”" has no id assigned.
    прописать id для каждого елемента формы в моей ситуации не позволительно.

  18. @dios
    Никаких id не нужно ставить вообще. Не выдумывайте ничего лишнего. Делайте так как в примере:
    $().ready(function(){
    $(”#myForm”).validate({
    rules : {
    username : {required : true, minlength: 2},
    password : “required”
    },
    messages : {
    username : {
    required : “Введите ваше имя”,
    minlength : “Введите не менее, чем 2 символа.”
    },
    password : “Введите пароль”
    }
    });
    });
    Здесь, из всех полей формы будут проверяться только две. Это как раз то, что вам нужно. И в полях ничего лишнего не нужно:
    <input type=”text” name=”username” value=”" />

  19. to admin:
    у меня параметр name уже используется и для каждого элемента поля он уникален, потому и не могу сделать так как Ви написали…а можна сделать так что бы правило по которому проходит валидация привязывалась к класу элемента(class=”mail”, mail:{required : true, email : true})? потому что когда так делаю, то валидатор не видит class=”mail” :(

  20. @dios
    Извините, не могу понять смысл:
    > у меня параметр name уже используется и для каждого элемента поля он уникален
    Так параметр name и должен использоваться во всех полях, и для каждого элемента он должен быть уникальным.
    Что касается классов, то нужно в элемент добавить:
    class=”required email”
    Это значит, что поле обязательное и там должен быть email.
    Есть и еще один, более радикальный метод - в плагине имеются функции, например email(). Нужно получить ссылку на элемент и вызвать функцию rules:
    $(”#myinput”).rules(”add”, “email”);
    Я его в действии не пробовал, но в документации это описано.

  21. Нестандартный вопрос.
    jQuery.validate() инициализирует правила и сообщения об ошибках после загрузки страницы по событию $().ready
    А как в таком случае можно изменить проинициализированные сообщения об ошибках? Например, что бы вставить в них значение из текстового поля, заполненного пользователем (в момент инициализации поле пустое)?

  22. помогите плиз, нужно проверить одно лишь поле и в случае ошибки вывести сообщение. У меня сообщение выводится во всех случаях…

    скрипт валидации форм !!!

    $(’.valid’).ready(function () {
    var patt = /\D/;
    $(’.valid .required’).each(function () {
    var classArray = $(this).attr(’class’).split(’ ‘);
    $(classArray).each(function(i){
    if (classArray[i] == ‘number’ && !( patt.test($(this).val()) ))
    {
    alert(’not a number’);
    }
    });
    });
    });

    .error {
    border: 2px solid #f00;
    }

    число ли введено? 
    еще одно поле просто так 

  23. @ober
    Да вопрос нестандартный, и сделать так как вы хотите очень проблематично. Мне кажется можно сделать так: добавить к кнопке submit класс “cancel” - это отменит валидацию формы, затем добавить к опциям обработчик submitHandler - в него будет передано управление при отправке формы. Затем, используя ф-ию setDefaults установить заново опции messages с новыми значениями сообщений, ну и в конце вызвать валидацию формы вручную.
    submitHandler :function(myForm){
    $.validator.setDefaults({messages : …. });
    this.form();
    }

  24. @pontiak
    Вы используете функцию each, а значит ваша проверка на валидность будет выполнена для всех полей вне зависимости от результата проверки.
    Вместо each используйте обыкновенный цикл:
    for (var i=0; i < classArray; i++){
    if (/* если код не валидный */) {
    alert(’error’);
    break;
    }
    }

  25. @admin
    нашёл простое и изящное решение при помощи jQuery.format
    вот часть кода инициализации:

    messages: {
    user_email: {remote: (”Е-mail {0} уже зарегистрирован. Напомнить пароль“)},
    terms: “Ytj,[jlbvj принять условия.”
    }

    Оказалось, что для текстового поля {0} есть его содержание (в отличие от max/min и range, где вместо {0} и {1} подставляются соотв ограничители). Несколько неожиданно, но удобно. и не надо мутить с cancel и submitHandler :)

  26. упс! исправляюсь:

    messages: {
    user_email: {remote: jQuery.format(”Е-mail {0} уже зарегистрирован. <a href\=\”restore_pwd?email={0}\”>Напомнить пароль</a>“)},
    terms: “Необходимо принять условия.”
    }

    P.S. Не мешало бы добавить какой нить тег для кода ;)

  27. Всем привет. А может кто подсказать как с помощью данного плагина сделать такое:
    есть форма, по кнопке на сабмит проходит валидация, в стандарте все работает, но хочется:
    менять див стиль под полем (импут,текстареа и т.д.) и в заданном месте выводить сообщение об ошибке для данного поля.
    при правильном вводе возвращать все в исходное состояние.
    Делал при помощи:
    errorPlacement: function(error, element) {
    var em = element.attr(”name”);
    var title = $(”#d_”+em).attr(”class”);
    $(”#d_”+em).removeClass(title);
    $(”#d_”+em).addClass(”field_wide_err”);
    смену класса дива под полем, но как вывести сообщение об ошибке и вернуть потом все обратно пока не понял :(
    Подскажите, кто знает.

  28. Сорри, туплю что то под утро, с валидацией разобрался, всё ОК.. А как сделать что б когда валидация прошла успешно, по нажатию кнопки сабмит данные из формы писались в базу данных?

  29. @Denis
    Скрипт при успешной валидации отправляет данные на сервер, а уж как там сохранять, это уже зависит от него не зависит.

  30. admin:
    Намекните хоть где рыть? Не могу понять как данные из формы при успешной валидации сохранить в базу?

  31. @admin
    Если вы используете php/mysql, то в скрипте, в который отправляются данные формы, получаете данные из $_POST, составляете запрос, вроде этого:
    INSERT INTO `my_table` VALUES (1,2,3);
    Вместо 1,2,3 данные из $_POST. Ну а дальше выполняете этот запрос используя стандартные функции mysql_query.
    Это надо смотреть в учебниках по PHP или того языка, который вы на сервере используете.

  32. Так это понятно, я не могу разобраться как по событию “успешная валидация” запустить PHP файл?

    Весь нет облазил, валидация хорошо описанна, а вот как после успешной валидации всё записать в базу нигде не нашёл(

  33. В форме, в параметре action указан скрипт, в который будет отправляться запрос. Далее, в примере в статье указано, как выполняется отправка (в примере используется плагин ajax form):
    $(”#form”).validate({
    submitHandler: function(form) {
    jQuery(form).ajaxSubmit({
    target: “#result”
    });
    }
    });
    Т.е. запрос будет отправлен в скрипт, указаный в action, а в том скрипте уже сохраняете в БД.

  34. admin: спасибо, всё оказалось действительно просто)

  35. Добрый день,

    Подскажите плз по такой небольшой проблеме.
    Есть несколько инпутов и хочется проверить что заполнен хотя бы один из них. Можно ли реализовать это данным плагином?

  36. @Andrey
    Прошу прощения за столь поздний ответ.
    Мне кажется так можно сделать если использовать функцию element() для каждого из требуемых полей (проверять перед отправкой формы). Перед этим для каждого из полей нужно поставить правило required.

  37. Александр 5 декабря 2008 в 17:26

    Здравствуйте.
    Тема уже поднималась но не раскрыта до конца:

    rules: {
    Name: {
    required: true,
    minlength: 2,
    maxlength: 12
    },
    а если Name[qwerty], как это выражение массивом представить?

  38. @Александр
    Почему же не раскрыта? Такое название поля нужно указывать как и все остальные, только заключать его в кавычки:
    “Name[qwerty]“: {
    required: true,
    minlength: 2,
    maxlength: 12
    }
    Сам я с такими полями не работал, однако доверяю документации: http://docs.jquery.com/Plugins/Validation/Reference#Fields_with_complex_names_.28brackets.2C_dots.29
    Там приводятся такие вот примеры:
    “user[email]“: “email”,
    “user.address.street”: “required”

  39. Александр 6 декабря 2008 в 12:12

    Да спасибо все работает. Меня ввели в заблуждение кавычки во второй половине выражения. Нужно писать именно так, так вы написали
    “Name[qwerty]“: {
    required: true,
    minlength: 2,
    maxlength: 12
    }
    Еще раз спасибо, очень помогли

  40. Кто нибудь разобрался как сделать несколько remote проверок в одном поле?

    Возникла необходимость проверки email:
    1. Есть ли такой email в базе?
    2. Если этот email в базе “чёрный список”?

    Соответственно выводить разные сообщения для проверок.

  41. @Dinis
    Я думаю так можно сделать если проверку email на наличие в базе делать стандартным способом, а для проверки черного списка написать и подключить свой метод:

    $.validator.addMethod(”checkblacklist”, function(value) {
    ….
    return true; // или false
    }, ”);

  42. возникла проблема такого рода:
    если написать просто то всё прекрасно работает. а вот если добавить value=”", то валидация отказывается работать.
    кто нибудь сталкивался? как решить?

  43. @junky
    Нет, я не сталкивался. Я сомневаюсь что проблема может быть в value. В моих демо примерах этот атрибут установлен и все работает. Firebug никаких ошибок у вас не показывает?

  44. Кто-нибудь знает, как вывести сообщение об ошибке в title к инпуту? (чтобы при этом оно больше нигде не появлялось)

  45. Добрый день господа.
    Проблема такая, у меня есть два поля : мобильный телефон, и домашний телефон, необходимо заполнить хотя бы одно. т.е если заполнен мобильный то домашний не обязателен, и наоборот… Никак не могу добиться такого эффекта, подскажите как такое реализовать.

  46. Пожалуйста, выложите новичку код test.php …)))

  47. @Me
    У меня там сделующее :)
    < ?php
    echo 'false';
    ?>
    Это ведь демо пример. В реальном приложении там нужно проверять получаемое значение и возвращать либо true, либо false.

  48. проблемка - remote не работает если поле содержит русские символы, если нет - работает. используется mysql, кодировка базы CP1251.

  49. @chuvak
    Ну эта проблема явно не касается данного скрипта. Он ведь смотрит на результат от сервера, который возвращает true или false. Если у вас кодировка страницы и базы совпадает, то все будет работать. Если нет, то перед сравнением, в своем php скрипте перекодируйте полученное значение функцией iconv.

  50. я так понял jquery отправляет поля в кодировке utf-8, вот так работает и для русских символов:
    $name = iconv(’utf-8′, ‘windows-1251′, $name);

  51. Спасибо за ман. Очень помог.
    Только вопрос возник,почему правило для input file
    userfile: {
    remote: “pict.php”
    }
    не работает?

    Когда просто ставишь required: true - тогда все нормально. Может это по каким-то соображениям безопасности?

  52. @Дмитрий
    Не могу сказать наверняка. По-моему это логично - если поле необязательное, то необязательно его и проверять при каждом клике в этом поле.

  53. просто есть 2 поля. Одно - это скрытое, куда добавляется инфа если файл уже загрузился до отправки формы - то поле не обязательно.

  54. remote не отрабатывает в Internet Explorer. Никто не сталкивался?

  55. @Ag
    С такой проблемой не сталкивался. IE ошибки какие-нибудь показывает?

  56. success: function(label) { успешная валидация - далее код}

    Вопрос, а как отловить что произошла ошибка при валидации? как будет выглядеть код в этом случае?

  57. Сам разобрался, если кому надо:

    errorPlacement: function(error, element) { обработка ошибок }

  58. Родился ещё вопрос:

    Как сделать что бы правило:
    remote: “проверка.php”
    - не “дёргало” после ввода каждой буквы файл - “проверка.php”

  59. @Denis
    По всей видимости нужно заменить событие, по которому выполняется валидация с onkeyup на onblur. Если не ошибаюсь, это делается добавлением параметра event: “blur” к списку правил для поля.

  60. Ещё вопрос:

    Есть инпут поле - UserName

    Как вытащить из него в переменную “UserNameText ” то, что юзер ввёл?

    var UserNameText = $(’input[@name=UserName]‘).html();
    Что не так делаю?

  61. @Denis
    вместо html() нужно val()
    var UserNameText = $(’input[name=UserName]‘).val();

  62. @admin
    Огромное спасибо! - РАБОТАЕТ)

    Отличная статья, благодарю за внимание и оперативность ответов)

  63. ..решил снова спросить, что б не сидеть до утра :-[
    Допустим есть стандартное правило:
    password: {
    required: true,
    login: true,
    minlength: 5
    remote: “./check/pass_recovery_check.php?check=3″
    }
    Как узнать значения переменных - required, login, minlength, remote (true-false)? т.е. узнать какое правило выполнено, а какое нет.

  64. Не подскажете, столкнулся с такой проблемой что если делаю так
    username : {required : true, minlength: 4, remote: “/admin/checkusername”},
    то когда идёт проверка проверяет всё нормально но когда условие выполняется, бордер инпута возвращает себе старый цвет а ошибка не пропадает. Если убрать , remote: “/admin/checkusername” то сразу всё работает нормально.

  65. Доброго времени подскажите пожалуйста. У меня выдает такую ошибку:

    Предполагается наличие объекта
    Строка 13 Символ 1

    кусок кода:
    $().ready(function(){

    и что за файл jquery.validate.min.js
    в примере я его так и не нашол.

    Спасибо.

  66. @Антон
    Правильно будет $(document).ready(…);
    Файл jquery.validate.min.js должен присутствовать в пакете самого плагина. Возможно я забыл в пример вложить. Можете взять отсюда: http://www.jstoolbox.com/js/jquery.validate.min.js

  67. Спасибо разобрался =). Еще один вопрос, наверно глупей его быть не может, но уж простите. Когда вызываем проверку удаленным скриптом:
    username : {required : true, minlength: 2,maxlength: 6,remote: “registr.php” },

    Код registr.php:

    Тут немного не понял что должен возвращать скрипт и куда? У Вас написано простое текстовое значение. Если возможно пример был бы благодарен. Уж очень библиотека понравилась.

  68. Хорошая функция обработки кода ;) прости за спам.

    if(!preg_match(”|^[a-z]$|i”, $_POST['username']))
    {
    echo”false”;
    }
    echo”true”;

  69. Спасибо!

  70. @Антон
    Да ничего страшного ))

  71. Видно не совсем понял проверку удаленным скриптом все время выдает ошибку:

    if(!preg_match(”|^[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,6}$|i”, $_POST['username']))
    {
    echo”false”;
    }
    То есть грубо проверя на условия корректности емайла. Но даже при написании test@test.com выдает что это ошибка.

  72. Сделайте пожалуйста возможность скачать всю документашку одним плагином.

  73. @DenisO
    Документация на сайте автора плагина

  74. Не нашел ответа на просторах нета- пишу к вам, используя метод “remote” при получении ответа от сервера “false” необходимо выполнить некий код (перегрузить капчу), но “success” в “remote” почему-то блокирует сам плагин. Вешал перегруз капчи и на “errorPlacement” - код выполняется только раз- до появления errorLabel, мутно написал конечно..
    …………
    rules: {
    keystring: {
    required: true,
    cache: false,
    remote: {
    url: “./_scriptsphp/process.php”,
    type: “post”,
    data: {
    keystring: function(){
    return $(”#keystring”).val();
    }
    },
    success: function(response){
    if (response == false) {
    $(”#capture_image”).trigger(’click’);
    }
    }
    }
    }
    },
    messages: {
    keystring: “Вы допустили ошибку в написании кода с картинки. \n Возможно Вы набирали код русскими буквами?”
    },
    errorPlacement: function(error, element) {
    if (element.attr(”name”) == ‘keystring’ ){
    //$(”#capture_image”).trigger(’click’);
    error.appendTo( element.parent());
    }
    },
    …………….

  75. @crocus
    Мне кажется, функция success должна быть вне определения rules. От того и не выполняется.
    Посмотрите пример здесь: http://jquery.bassistance.de/validate/demo/captcha/

  76. Эта success внутри remote, и не является фукцией success самого плагина, пример изучил тщательно- не о том речь, я хочу добиться чтоб при невалидном наборе капча автоматом перегружалась, т.е. remote возвращает, либо true, либо false - и при false должен выполнится код для перегрузки капчи

  77. Ребят, подскажите пожалуйста как бы это реализовать и вообще возможно ли это с помощью Jquery Validation?
    Есть 4 поля формы, в каждом отдельно Имя, Фамилия, Отчество, Дата Рождения.
    Есть необходимость проверить всё это дело на совпадение конкретному, допустим массиву (Имя, Фамилия, Отчество, Дата Рождения).
    Скрипт, как я понял проверяет поля формы отдельно, и нет функции проверки значений нескольких полей одновременно на совпадение в remote. Как думаете, может в последнем поле каким-то образом собрать все значения и отправить на проверку?
    Понятно, что можно это реализовать стандартно - после Submit, но уж очень хочется попробовать “на лету” проверять ))
    Спасибо.

  78. Еще один вопросик. Тут в комментах выше коллега упоминал про помещение сообщения об ошибке в отдельный блок, что и логично, и красиво можно оформить.
    А вот как реализовать эту возможность, он не написал. Очень хотелось бы услышать более развернутый ответ на этот вопрос, с примером. Спасибо!

  79. А как можно сделать чтобы если в поле введено не правильное значение, по нажатию кнопки вылазил alert, или к примеру выполнялась некая другая функция?

  80. @Игорь
    Есть в плагине функция element( element ), которая проверяет указанное вами поле. То есть вы можете по нажатию кнопки проверять, верно ли введено значение, и если нет то выполнять нужное вам действие - алерт или другая фукнция.

    @KonstRuctor
    Ну по поводу помещения ошибки в блок не знаю, скорее всего, нужно также “вручную” выполнять валидацию при помощи valid( ) или element( element ) и если есть ошибки, то показывать их в отдельном блоке. Есть еще вариант несколько сложнее - переопределить фукнцию showErrors, которая ошибки показывает.

  81. А как можно в php отправить сразу две переменные. просто мне нужно проверку сразу по двум сделать.

Оставить комментарий

JSToolbox создан на основе WordPress