0

ユーザーが入力したテキストエリアボックス内のテキストをカウントダウンする JQuery プラグインを使用して作業を行っています。何らかの理由で、プラグインが期待どおりに機能しません。

私は妥当な JavaScript 開発者ですが、これまでプラグインを作成したことがありません。これをデバッグして、なぜ機能しないのかを突き止めようとしています。

このプラグインは、jQuery 1.3.x および 1.4.x でテスト済みであると説明しています。1.7.1 を使用する必要があります。

を使用して、プラグインのこの部分を追跡できましalert()た。処理が特定のポイントに進んでいることがわかりますが、処理が進んでいないようです。または、jQuery プラグインのデバッグ方法をまだ学んでいるので、読み間違えている可能性があります。

コード スニペットでは、 s を使用できる場所とできない場所にコメントを追加しましたalert

$.fn.NobleCount = function(c_obj, options) {
    var c_settings;
    var mc_passed = false;

    // if c_obj is not specified, then nothing to do here
    if (typeof c_obj == 'string') {

        // check for new & valid options
        c_settings = $.extend({}, $.fn.NobleCount.settings, options);

        // was max_chars passed via options parameter? 
        if (typeof options != 'undefined') {
            mc_passed = ((typeof options.max_chars == 'number') ? true : false);
        }


                    // THIS ALWAYS FIRES
                    console.log("I am here");

        // process all provided objects
        this.each(function(){

                           // THIS NEVER FIRES
                           console.log("I DON'T SEEM TO EVER EXECUTE");

            var $this = $(this);

            // attach events to c_obj
            attach_nobility($this, c_obj, c_settings, mc_passed);
        });
    }

    return this;
};

attach_nobility関数内のコードは決して実行されないようです。

jquery 1.4 から jquery 1.7 への変更により、この作業が異なったものになりましたか?

編集:元の NobleCount jquery プラグインページへのリンクは次のとおりです。

編集:私はこのようにプラグインを呼び出しています:

(function() {

  $('#how_to_improve_input').NobleCount('#how_to_improve_count');

}).call(this);
4

1 に答える 1

1

プラグインに問題があるとは思えません。あなたが提供したコードと同じパターンで基本的なものを作りました。

(function( $ ){
    $.fn.foo = function (c_obj, options) {
        var c_settings;
        var mc_passed = false;
        if (typeof c_obj == 'string') {
            c_settings = $.extend({}, {a:"xxxx"}, options);
            console.log("aaaa");
            this.each(
                function(){
                    console.log("I DON'T SEEM TO EVER EXECUTE");
                    var $this = $(this);
                }
            );
        }
        return this;
    };
})( jQuery );

シンプルなセレクターで実行すると

jQuery("div").foo("asdf");

each ループに入るため、大量のログ メッセージが表示されます。

私はそれを行う場合

jQuery("sfsdfdiv").foo("asdf");

要素がなくても、関数に入ります。コンソールに「aaaa」と表示されます。したがって、プラグインではなくセレクターを確認する必要があります。

于 2012-05-03T20:06:12.310 に答える