Пользовательский метод jQuery Validator - PullRequest
1 голос
/ 28 октября 2009

не могли бы вы взглянуть на это http://jsbin.com/osolo/, пожалуйста?

Если вы вводите букву в минимальном возрасте, а не число, а затем нажимаете «Отправить», это проверяется с использованием валидатора jquery с использованием регулярного выражения в пользовательском методе проверки, это работает, но сейчас я хочу сделать его немного более динамичным.

В пользовательском методе проверки строка

var data = $(element).metadata(); 

извлекает метаданные из проверяемого элемента, я хотел бы использовать

data.validateOptions.regex

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

jQuery.validator.addMethod(name, method, message)

Я бы хотел использовать

data.validateOptions.message

как сообщение об ошибке из пользовательского метода, может кто-нибудь указать мне правильное направление, пожалуйста?

Спасибо

OneShot

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Я думаю, что ответ Алекса не сработает, потому что строки в JS неизменны.

Это близко, хотя. Начиная с кода Алекса, если вы создаете замыкание, содержащее объект данных (или просто строку сообщения), а также функцию, возвращающую сообщение, вы можете передать функцию в качестве третьего аргумента вызову addmethod. Вот так:

(function() {
    var data = {};
    var messager = function() {
        return data.validateOptions.message;
    };
    jQuery.validator.addMethod("perorgproperty", function(value, element) { 
        debugger; 
        //alert('testing perorgproperty'); 
        data = $(element).metadata();
        return this.optional(element) || /^\d+$/i.test(value); 
    }, messager);
})();
0 голосов
/ 28 октября 2009

А как насчет создания замыкания?

var data = {};
jQuery.validator.addMethod("perorgproperty", function(value, element) { 
    debugger; 
    //alert('testing perorgproperty'); 
    data = $(element).metadata(); 

    return this.optional(element) || /^\d+$/i.test(value); 
}, data.validateOptions.message); 

Пока функция оценивается перед сообщением, не будет ли message просто передана по ссылке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...