我正在编写一个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
背景,而不会失去我本来会得到的那个?