Динамический текст в проверке полей прототипа


Допустим, я добавляю пользовательский метод проверки полей следующим образом:

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" в этом втором параметре значением метки поля?

Author: Teja Bhagavan Kollepara, 2015-10-17

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);
}]

Но это определенно должно быть последним средством. Я не рекомендую вам этого делать.

 3
Author: Hydde87, 2017-07-28 04:31:46

Самый простой способ сделать это - добавить пользовательскую проверку в phtml

<div class="validation-advice" id="field-required-entry-[inputID]" style="display:none;">Please enter a value for [something specific here].</div>

Вы можете сохранить сообщение по умолчанию в прототипе для резервного копирования

 1
Author: user4447826, 2016-11-28 21:31:59