1

谁能告诉我如何使这个 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);
4

3 回答 3

5

return this;在方法的最后。

于 2012-01-03T21:56:41.640 回答
2

我会更进一步,并允许它通过使用以下each()函数在 jQuery 元素数组上工作:

$.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 插件的更多信息。

于 2012-01-03T22:18:00.557 回答
2

总是在插件方法的末尾返回这个(这也是预期的行为,应该总是这样做,除非有一个好的和有据可查的理由):

$.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;
    }
});
于 2012-01-03T21:57:33.340 回答