Динамический текст в проверке полей прототипа
Допустим, я добавляю пользовательский метод проверки полей следующим образом:
Validation.addAllThese([
['field-required-entry', 'Please enter a value for' + var, function (v) {
//Add your own validation code here
console.log(Validation);
return !Validation.get('IsEmpty').test(v);
}]
]);
Есть ли способ сделать возвращаемую строку ошибки динамической, т.е. заменить "var" в этом втором параметре значением метки поля?
2 answers
Я знаю, что это немного назад, но вы можете получить доступ к объекту проверки внутри вашего метода проверки, а затем динамически изменять его во время выполнения теста. Что вы можете сделать, например, добавить новый метод в объект проверки:
Validation.updateError = function(validationName, e, error){
var validation = Validation.get(validationName),
advice = Validation.getAdvice(validationName, e);
validation.error = error;
if (advice) advice.innerHTML = error;
return false;
}
Затем создайте пользовательское правило проверки, подобное этому:
Validation.add('validate-roll-dice', null, function(v, e){
var validationName = 'validate-roll-dice',
randomRoll = Math.floor(Math.random() * 6) + 1;
switch (randomRoll){
case 1:
return Validation.updateError(validationName, e, "You rolled 1, you're not good at this are you.");
case 2:
return Validation.updateError(validationName, e, "You rolled 2, still not that impressive.");
case 3:
return Validation.updateError(validationName, e, "You rolled 3, you could use some practice.");
case 4:
return Validation.updateError(validationName, e, "You rolled 4, I guess you passed?");
case 5:
return Validation.updateError(validationName, e, "You rolled 5, not bad, not bad...");
case 6:
console.log("You did it, don't get cocky kid.");
return true;
}
});
В вашем случае вы можете получить доступ к переменной извне закрытия, чтобы получить желаемый результат. Конечно, это работает только для новых пользовательских правил. Если вы хотите сделать это на существующие правила, вам придется сначала удалить их, а затем создать заново с новыми правилами сообщений об ошибках.
В качестве альтернативы вы можете исправить метод Validation.createadvice, чтобы оценить параметр ошибки как функцию, если будет передано замыкание, а затем сделать что-то вроде этого:
Validation.addAllThese([
['field-required-entry', function(){return 'Please enter a value for' + var; }, function (v) {
//Add your own validation code here
console.log(Validation);
return !Validation.get('IsEmpty').test(v);
}]
Но это определенно должно быть последним средством. Я не рекомендую вам этого делать.
Самый простой способ сделать это - добавить пользовательскую проверку в phtml
<div class="validation-advice" id="field-required-entry-[inputID]" style="display:none;">Please enter a value for [something specific here].</div>
Вы можете сохранить сообщение по умолчанию в прототипе для резервного копирования