0

オブジェクト/関数のスコープと何かの一般的な理解に問題があります。次のように、doc ready で jQuery 関数を呼び出しています。

$("#interactiveQA .actionTile").on('click',function(){
    $(this).activeTiles("init");
});

次に、次のようにスクリプトを作成します。

(function($) {

    var methods = {
        init: function() {
            var tileClicked = $(this).attr('id');
        }
    };

    $.fn.activeTiles = function(method) {

        // Method calling logic
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.slider');
        }
    };

})(jQuery);

これが私が探しているものです。可能な限り技術的に、現在の場所で var tileClicked = $(this)attr('id') が機能しない理由を説明していただけますか? また、別の方法やベストプラクティスなどを技術的に詳しく説明していただけますか?

4

3 に答える 3

5

打ち間違え:

$(this).attr('id');

注意してください.

于 2012-08-28T13:49:18.927 に答える
1

これは通常、プラグインのコンストラクターをセットアップしようとする方法です。

$.fn.whatever = function (method) {
    var args = arguments;
    var argss = Array.prototype.slice.call(args, 1);

    return this.each(function () {
        $this = $(this);
        if (methods[method]) {
            methods[method].apply($this, argss);
        }
        else if (typeof method === "object" || !method) {
            methods.init.apply($this, args);
        }
        else {
            $.error("Method " + method + " does not exist on jQuery.whatever");
        }
    });
};

問題が解決するかどうかはわかりませんが、過去に問題が発生したことはありません...

于 2012-08-28T13:55:57.813 に答える
0

this内部initがすでに jQuery オブジェクトである場合は、おそらく を使用するべきではなく、次のよう$(this)に単純に を記述します。this

     init : function( ) { 
       var tileClicked = this.attr('id');
     }
于 2012-08-28T13:55:26.920 に答える