Jquery.validation - как игнорировать значения по умолчанию при проверке обязательных полей
Я использую плагин проверки jquery для проверки регистрационной формы.
Каждое поле ввода текста содержит инструкции, предварительно заполненные как значения в поле ввода
ex: для поля ввода текста id = 'Name', значение по умолчанию будет установлено на "Enter Your Name". Я вставил ниже пример кода:
<input type="text" id="Name" value="Enter Your Name" onfocus="if(this.value == 'Your Name'){this.value = '';}" type="text" class="required" onblur="if(this.value == ''){this.value='Your Name';}" size="25" />
Мне нужно знать, как указать правило валидации, чтобы плагин выдавал требуемую ошибку поля, если поле ввода содержит либо сообщение по умолчанию, либо пустое значение.
Помогите оценить.
Ответы
Ответ 1
Я решил решить проблему, создав специальную проверку с помощью validator.addMethod, что очень просто.
Я вставил фрагмент моего блока проверки ниже:
//1. Define custom validation
$(document).ready(function()
{
jQuery.validator.addMethod("defaultInvalid", function(value, element)
{
switch (element.value)
{
case "Your Name": -- this will be the default value in the Name text box
if (element.name == "Your Name")
return false;
}
}
//2. Include custom validation in the rules for your element
$("#aspnetForm").validate(
{
rules:
{
Name: "required defaultInvalid"
},
messages:
{
Name: "Please input your name"
}
})
}
Я использовал то же самое для всех элементов, которые имеют значения по умолчанию в форме. Это отлично работает.
Ответ 2
Я думаю, что это лучше:
jQuery.validator.addMethod("defaultInvalid", function(value, element)
{
return !(element.value == element.defaultValue);
});
Ответ 3
для меня вышеупомянутое работало только со следующими изменениями:
jQuery.validator.addMethod("defaultInvalid", function(value, element)
{
switch (element.value)
{
case "Your Name":
if (element.name == "element_name") return false;
break;
default: return true;
break;
}
});
Ответ 4
Если вы хотите добавить к нему специальное сообщение об ошибке jus tuse this.
jQuery.validator.addMethod("defaultInvalid", function(value, element) {
return !(element.value == element.defaultValue);
}, 'Custom Error Message for this field');
Ответ 5
просто добавьте это после раздела правила
onfocusout: function(element) { $(element).valid(); }
и все будет в порядке.
Ответ 6
Я думаю, вам нужно добавить "случай по умолчанию", чтобы нормально работать:
jQuery.validator.addMethod("defaultInvalid", function(value, element) {
switch (element.value) {
case "$defaultText":
if (element.name == "$defaultText")
return false;
break;
default:
return true;
break;
}
});
Ответ 7
$.validator.addMethod("defaultInvalid", function(value, element, param){
var r = $(element).rules();
var req=(this.objectLength(r))?r.required:false; // OR may be var req=r.required; // true, false or undefined.
return !req || (value!=param);
},$.validator.messages.required);
...
,rules:{
message: {
defaultInvalid:$('#message').attr('placeholder')
}
}
Такая функция учитывает случаи "обязательных" и "необязательных" полей.
Выражение "! req" намеренно заменяет "this.optional(element)", потому что в некоторых случаях я получаю сообщение об ошибке "несоответствие зависимостей".
Ответ 8
Я сделал некоторый патч для jquery.validationEngine, чтобы игнорировать некоторое поле ввода для некоторой сложной формы. Я внесла следующие изменения:
- Добавить поддержку jquery.dropkick выбрать позицию проверки прокрутки
- Добавить поле выбора недействительно для ввода значения переменной vv_invalid (чтобы иметь возможность отображать директиву без правильного выбора)
- Добавить hideAllInstant для удаления проверки без задержки
- Добавить поддержку элемента jquery.simpleImageCheck, если исходный ввод скрыт, вместо этого используйте расположение simpleImageCheck.
- Добавить класс skipValidate, чтобы избежать проверки на некоторых полях, не отключая их.
- Исправить ошибку, если нет совпадения с prompt_err undefined, адресат генерирует ошибку
- добавить clearField, чтобы избежать проверки jquery.clearField.js
- Добавить validateHiddenFields, подтверждение в скрытом и не скрытом поле
В вашем случае вы можете использовать модификацию для класса skipValidate для его выполнения.
Вы можете найти исправленный script здесь вместе с английским фильтром (fr также доступен):
jquery.validationEngine.js Патч
jquery.validationEngine-en.js Патч
Я должен отправить эти изменения в концентратор git, но не успел сделать это прямо сейчас.
Джером Годбоут
Panthera Dental