jquery插件中的事件只使用插件使用的最后一个选择器?

时间:2013-07-08 02:34:34

标签: jquery

<script>
(function($, window, document, undefined) {
    $.fn.testPlugin  = function(options) {
        this.each(function() {
            $$ = this;
            $(window).on('scroll',function() {
                console.log($$);
            })
        });
    }
})(jQuery, window, document)
$("#block1").testPlugin();
$("#block2").testPlugin();
<script>

为什么它只显示#block2元素而不是同时记录block1和block 2?

1 个答案:

答案 0 :(得分:1)

这是因为$$被定义为全局(在浏览器的情况下为窗口)而不是本地(由于缺少var),这导致其值为使用插件的最后一个元素,覆盖任何其他以前的。只需在插件函数中使用var定义它,它就可以正常工作。

this.each(function () {
            var $$ = this; //<-- Here
            $(window).on('scroll', function () {
                console.log($$);
            })
        });

<强> Demo