我在这样的对象中定义了我的函数:
_clickHandler: function(event){
event.preventDefault();
},
attachClickEv: function(element){
......
element.on('click', this._clickHandler);
},
问题是我似乎无法将“this”传递给clickHandler函数
我知道我可以把它包装在另一个函数中,比如
var tthis = this;
element.on('click', function(event){
tthis._clickHandler(event, tthis);
});
但后来我不能用
解开该功能element.off('click', this._clickHandler);
还有其他办法吗?
答案 0 :(得分:6)
您可以使用bind。这是一个例子:
element.on('click', this._clickHandler.bind(this));
//later in the code...
_clickHandler: function(event) {
}
既然你正在使用jQuery,你也可以使用jQuery.proxy()
。更多信息:http://api.jquery.com/jQuery.proxy
<强>更新强>:
要访问回调中的元素,您必须使用event.target
或event.currentTarget
或执行以下操作(取决于您正在做的事情):< / p>
element.on('click', this._clickHandler.bind(this, element));
//later in the code...
_clickHandler: function(element, event) {
}
另一种方法是将元素设置为对象的属性,如:this.element = $('#el')
,然后在回调中使用它。
答案 1 :(得分:4)
_clickHandler: function(x, y, event){
// x = 1, y = 2
event.preventDefault();
},
attachClickEv: function(element){
element.on('click', this._clickHandler.bind(1,2));
},
答案 2 :(得分:2)
正如.on
的文档中所述,您可以将数据传递给您的活动。
.on(events [,selector] [,data],handler)
数据
类型:任何
触发事件时要在event.data中传递给处理程序的数据。
所以你的活动看起来像那样:
_clickHandler: function(event){
var myObj = event.data.object;
// [myObj] will be your plugin
// [this] will be the clicked element
// [event] will be you event
},
attachClickEv: function(element){
......
element.on('click', {object : this}, this._clickHandler);
},
答案 3 :(得分:1)
假设您使用的是支持的浏览器(ES5),您可以使用bind
,即:
element.on('click', this._clickHandler.bind(this);