1

この jQuery プラグインを連鎖可能にする方法を教えてもらえますか? プラグインはフィールドへのテキスト入力を制限し、渡された場合は残りのテキスト数を第 2 引数に返します。ありがとう。

(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

プラグインメソッドの最後で常にこれを返します(これは予想される動作でもあり、十分に文書化された理由がない限り、常に実行する必要があります)。

$.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 に答える
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);
        });
    }
});

jQuery プラグインの作成に関する詳細については、http://docs.jquery.com/Plugins/Authoring#Maintaining_Chainabilityも参照してください。

于 2012-01-03T22:18:00.557 に答える