Ответ 1
Вам действительно нужно установить опцию onkeyup
для функции, которая принимает проверяемый элемент как параметр, поэтому попробуйте изменить:
onkeyup: true,
к
onkeyup: function(element) {$(element).valid()}
С моей конфигурацией проверки jquery я получаю следующую ошибку при установке onkeyup в true. Он работает, если я устанавливаю его в false, но я не получаю подтверждения проверки до тех пор, пока я не размываю поле, и я ищу, чтобы получить подтверждение для каждой клавиатуры:
$("#signupForm").validate({
onkeyup: true,
onclick: false
// rules omitted for brevity
}
Я получаю следующую ошибку:
TypeError: validator.settings[eventType].call is not a function
validator.settings[eventType].call(validator, this[0], event);
jquery.validate.js line 391
Вам действительно нужно установить опцию onkeyup
для функции, которая принимает проверяемый элемент как параметр, поэтому попробуйте изменить:
onkeyup: true,
к
onkeyup: function(element) {$(element).valid()}
onkeyup
включен по умолчанию, поэтому вам не нужно устанавливать его в true
. Если вы это сделаете, вы нарушите функциональность, уже встроенную в плагин.
У вас есть три варианта:
1) Оставьте параметр onkeyup
вне .validate()
. По умолчанию функция onkeyup
включена. (изменение: "по умолчанию" означает, что проверка выполняется на каждом событии "key-up" только после того, как поле первоначально подтверждено другим событием.)
DEMO: http://jsfiddle.net/ZvvTa/
2) onkeyup
можно установить в false
на отключить эту опцию.
DEMO: http://jsfiddle.net/ZvvTa/1/
3) Замените onkeyup
своей собственной функцией обратного вызова изменить, как она работает. (Демо использует функцию по умолчанию)
DEMO: http://jsfiddle.net/ZvvTa/2/
Ниже приведена функция по умолчанию, немодифицированная, onkeyup
:
onkeyup: function( element, event ) {
if ( event.which === 9 && this.elementValue(element) === "" ) {
return;
} else if ( element.name in this.submitted || element === this.lastElement ) {
this.element(element);
}
}
Смотрите: http://docs.jquery.com/Plugins/Validation/validate#toptions
ИЗМЕНИТЬ
По умолчанию плагин не выполняет проверку "key-up" до тех пор, пока поле сначала не будет проверено другим событием. ( "Lazy" валидация)
Итак, вот более правильно модифицированная версия функции обратного вызова onkeyup
, которая обеспечит немедленную проверку onkeyup
. ( "Ожидаемая" проверка)
ДЕМО: http://jsfiddle.net/QfKk7/
onkeyup: function (element, event) {
if (event.which === 9 && this.elementValue(element) === "") {
return;
} else {
this.element(element);
}
}
@Sparky прав. Правильный ответ заключается в том, чтобы удалить параметр onkeyup
, моя скрипка работала, потому что я удалил параметр onkeyup
не потому, что изменил его на keyup
.
По умолчанию проверка будет происходить при событии keyup, если вы хотите отключить эту функцию, вам нужно добавить настройку onkeyup: false
.
См. обновленную демонстрацию.
Демо: Fiddle
Логические значения не являются допустимыми значениями для события onkeyup. Вместо этого добавьте функцию, что нужно сделать. Попробуйте что-то вроде:
onkeyup: function(element) {
$(element).valid();
}
onblur: function(element) {
$(element).valid();
}
Как насчет расширения onkeyup:
$('#signup-form').validate({
onkeyup: function(element) {
var element_id = $(element).attr('id');
if (this.settings.rules[element_id].onkeyup !== false) {
$(element).valid();
}
},
Итак, теперь в правилах вы можете сделать это:
rules: {
username: {
required: true,
minlength: 3,
maxlength: 25,
onkeyup: false, /* on blur validation */
},
password: {
required: true,
passwordmeter: true,
onkeyup: true, /* on keyup validation */
},
Расширив onkeyup, мы сделали это по умолчанию, поэтому придерживаться onkeyup: true
необязательно.