この質問は、このjQuery制限プラグインを参照しています。ソースは次のとおりです。
(function($){
$.fn.extend({
limit: function(limit,element) {
var interval, f;
var self = $(this);
$(this).focus(function(){
interval = window.setInterval(substring,100);
});
$(this).blur(function(){
clearInterval(interval);
substring();
});
substringFunction = "function substring(){ var val = $(self).val();var length = val.length;if(length > limit){$(self).val($(self).val().substring(0,limit));}";
if(typeof element != 'undefined')
substringFunction += "if($(element).html() != limit-length){$(element).html((limit-length<=0)?'0':limit-length);}"
substringFunction += "}";
eval(substringFunction);
substring();
}
});
})(jQuery);
今、私はここでちょっとしたことをしているかもしれません...しかし、多分私は何かが欠けています。これが私の質問/懸念です:
1)文字列に部分文字列関数を作成し、それをeval
'ingする目的は何ですか?よく見ると、関数が正常に初期化されていれば、拡張機能は完全に正常に機能するようです。
setInterval
2)部分文字列関数を実行するためにを使用するのは好きではありません。keypress
または同様のイベントは、これを行うためのより良い、より論理的な方法ではないでしょうか?また、これがv1.2変更ログで参照されている「テキストのちらつき」バグの原因である(または少なくとも有効になっている)と思います(いいえ、修正されていません)。
3)変数がf
初期化されるのはなぜですか?使用または参照されることはありません。
4)また、これは連鎖可能なメソッドではなく、jQuery拡張機能としては連鎖可能である必要があります。私はjQuery拡張機能の記述にあまり慣れていませんが、これreturn this;
はメソッドの最後で実行できますよね?
これはプログラミングが不十分な場合のようですが、外部の意見を聞きたいと思います。