1

この質問は、この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する目的は何ですか?よく見ると、関数が正常に初期化されていれば、拡張機能は完全に正常に機能するようです。

setInterval2)部分文字列関数を実行するためにを使用するのは好きではありません。keypressまたは同様のイベントは、これを行うためのより良い、より論理的な方法ではないでしょうか?また、これがv1.2変更ログで参照されている「テキストのちらつき」バグの原因である(または少なくとも有効になっている)と思います(いいえ、修正されていません)。

3)変数がf初期化されるのはなぜですか?使用または参照されることはありません。

4)また、これは連鎖可能なメソッドではなく、jQuery拡張機能としては連鎖可能である必要があります。私はjQuery拡張機能の記述にあまり慣れていませんが、これreturn this;はメソッドの最後で実行できますよね?

これはプログラミングが不十分な場合のようですが、外部の意見を聞きたいと思います。

4

1 に答える 1

1

1)同意します。彼は私への閉鎖を理解していないようです。

2)どのイベントがテキストボックスの内容を変更する可能性があるかを正確に予測することは困難です。キーを押すのは明らかですが、おそらくマウスイベントでもそれが可能です。他のJavascript関数によって更新することもできます。

3)いくつかの推測があります。a)クロージャを機能させようとしたときに、コールバック関数を保持するためにそれを使用し、評価クラッジに切り替えたときに宣言を削除しませんでした。b)部分文字列関数文字列を保持するはずでしたが、彼はそれを割り当てたときに間違いを犯して呼び出しました(そこでの宣言substringFunctionを忘れたことに注意してください)。var

4)本当。

誰かが自分のコードをWebサイトに投稿したからといって、彼らが専門家であるとは限りません。

于 2012-10-09T01:06:30.560 に答える