Проблема с плагином Jquery. Как мне вернуть значение? - PullRequest
2 голосов
/ 28 декабря 2010

Я написал простой плагин для проверки правильности jquery, и он отлично работает.Но я новичок в этом и не знаю, как вернуть значение из плагина.

(function($){
    $.fn.bluevalidate = function(options){

        var defaults = {
            errorMsg : 'You have an error',
            required : false,
            no_space : false,
            no_special_chars : false,
            numbersOnly : false,
            max_chars : 0,
            min_chars : 0,
            matchWith : '',
            matchMsg : 'Please retype the same value',
            email : false
        };

        var opt = $.extend(defaults,options);

        return this.each(function(index,element){
           var e = $(element);
           var p = e.parents('span:eq(0)');

           var msg = [];
           e.focus(function(){
                msg = [];
           });


           //-------------------------------------------------------------------------------
           //Handle required
           if(opt.required==true)
           {
                e.blur(function(evt){
                    if(e.val()=='')
                    {
                            e.css('background','#ffcccc');
                            msg.push('This field is required.');
                    }
                    else
                    {
                        e.css('background','#ffffff');
                    }
                    displayMsg();
                });
           }
....
....
..

В основном мне нужно выяснить количество ошибок в форме.Поэтому я подумал, что напишу функцию, которая вызовет событие blur () для всех полей и, таким образом, получит ошибки.Но как мне вернуть это значение в переменную вне плагина?

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

1 Ответ

4 голосов
/ 28 декабря 2010

Поскольку каждый плагин jQuery должен возвращать упакованный набор объектов jQuery (чтобы поддерживать цепочку), вы не можете (на самом деле вы могли бы, но не должны) возвращать любое значение, используя return;.

Поскольку вы правильно возвращаете упакованный набор jQuery, вы можете вызвать функцию обратного вызова для обработки значения, которое вы на самом деле возвращали бы. Ваш объект параметров является идеальным местом для этого:

$('element').bluevalidate({
    /* some flags */
    callback:   function(value) {
         // do something with value
    }
});

Вы можете вызвать этот обратный вызов в любой точке вашей функции плагина. Предположим, вы хотите что-то сделать с вашей переменной p, это будет выглядеть так:

if( typeof options.callback === 'function' )
    options.callback.apply(this, [p]);

Это вызовет вашу функцию обратного вызова и передаст переменную. this на самом деле не является обязательным, но это хороший бонус - иметь текущий узел в качестве контекста в вашем обратном вызове.

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