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

Typo:

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

Note the .

于 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 回答