使用jQuery代理时保留两个`this`引用

时间:2014-10-12 09:06:06

标签: javascript jquery this

我正在编写一个jQuery插件,并且在将事件附加到函数时使用$.proxy保留在上下文中。像这样:

function myPlugin(element) {
    this.element = $(element);
}

$.extend(myPlugin.prototype, {
    init: function() {
        this.btns = this.element.find('.control-btns');
        this.register_events();
    },

    register_events: function() {
        this.btns
            .off('click.myplugin')
            .on('click.myplugin', $.proxy(this.foo, this));                   
    },

    foo: function(e) {
        this.bar();
        var btnClicked = $(e.target);
    },

    bar: function() {
        // some code here
    }
});

正如您所看到的,在运行foo时,我需要为this设置正确的上下文,以便能够调用bar函数(它只是为了例如,我做的不仅仅是调用一个特定的函数。)

但是,我还需要另一个 this - 代表点击按钮的 。我认为e.target就够了,但事实证明它捕获了被点击的东西,而不是带有事件监听器的元素 - 即如果我的按钮有一些内部区域(比如一个跨度),点击它就会传播,然后e.target将指向<span>而不是<button>。我做了一个显示问题的small demo

如何才能传递正确的this背景,而不会失去我本来会得到的那个?

1 个答案:

答案 0 :(得分:5)

而不是target您需要currentTargetcurrentTarget是您附加事件处理程序的元素。

请参阅demo