将其他参数传递给事件处理程序

时间:2015-02-04 20:46:29

标签: javascript jquery javascript-events

我在这样的对象中定义了我的函数:

_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);

还有其他办法吗?

4 个答案:

答案 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.targetevent.currentTarget或执行以下操作(取决于您正在做的事情):< / p>

element.on('click', this._clickHandler.bind(this, element));

//later in the code...

_clickHandler: function(element, event) {

}

另一种方法是将元素设置为对象的属性,如:this.element = $('#el'),然后在回调中使用它。

实例:http://jsbin.com/mezuberucu/1/edit?html,js,output

答案 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);