Как сделать этот плагин jQuery цепным? - PullRequest
1 голос
/ 04 января 2012

Может кто-нибудь показать мне, как сделать этот плагин jQuery цепным?Плагин ограничивает ввод текста в поле и возвращает оставшееся количество текста для второго аргумента, если он был передан. Спасибо.

(function($) {

$.fn.extend({
    limit: function(limit, element) {
        var interval;
        var self=$(this);
        $(this).focus(function(){
            interval = window.setInterval(function(){
                substring(self, limit, element);
            },100)
        });
        $(this).blur(function(){
            clearInterval(interval);
            substring(self, limit, element);
        });
        substring(self, limit, element);
    }
});

function substring(self, limit, element) {
    var val = $(self).val();
    var length = val ? val.length : 0 ;
    if( length > limit ) {
        $(self).val($(self).val().substring(0,limit));
    }
    var toe = typeof element;
    if (toe!='undefined') {
        if (toe=='string') {
            $(element).html((limit-length<=0)?'0':limit-length);
        } else if (toe=='object') {
            element.html((limit-length<=0)?'0':limit-length);
        }
    }
}

})(jQuery);

Ответы [ 3 ]

4 голосов
/ 04 января 2012

Просто return this; в конце метода.

2 голосов
/ 04 января 2012

Я бы пошел дальше и позволил бы этому работать с массивом элементов jQuery, используя функцию each():

$.fn.extend({
    limit: function(limit, element) {
        return this.each(function() {
            var self=$(this);
            $(this).focus(function(){
                interval = window.setInterval(function(){
                    substring(self, limit, element);
                },100)
            });
            $(this).blur(function(){
                clearInterval(interval);
                substring(self, limit, element);
            });
            substring(self, limit, element);
        });
    }
});

Также см. http://docs.jquery.com/Plugins/Authoring#Maintaining_Chainability для получения дополнительной информации оразработка плагинов jQuery.

2 голосов
/ 04 января 2012

Всегда возвращайте это в конце метода плагина (что также является ожидаемым поведением и всегда должно выполняться, если нет веской и хорошо документированной причины):

$.fn.extend({
    limit: function(limit, element) {
        var interval;
        var self=$(this);
        $(this).focus(function(){
            interval = window.setInterval(function(){
                substring(self, limit, element);
            },100)
        });
        $(this).blur(function(){
            clearInterval(interval);
            substring(self, limit, element);
        });
        substring(self, limit, element);
        return this;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...