如何在事件处理程序中重新创建“this”?

时间:2012-07-03 00:48:15

标签: javascript jquery

我有一个预先绑定到特定变量的事件处理程序(通过$.proxy)。因此,当触发处理程序时,this不是正常值,而是我的预绑定值。

我想使用处理程序的this参数恢复event,但this似乎没有直接映射到event.currentTargetevent.target,或任何其他活动财产。

所以,我试过挖掘jQuery源代码,但事件回调的东西非常复杂,我无法弄清楚this到底是什么设置。有没有人知道如何仅使用事件参数来模拟jQuery事件处理程序this

* *编辑* *

只是为了澄清,这是一个例子:

var boundThis = {foo: 'bar'}
var handler = $.proxy(function(event) {

    // Because of the $.proxy, this === boundThis
    // (NOT the normal "this" that jQuery would set)
    // In theory event has everything I need to re-create this,
    // but I'm having trouble figuring out exactly how

    // Here's a naive/non-functional example of what I'm trying to do
    jQueryThis = event.target; // If only this worked ...

}, boundThis);
$(someElement).click(handler);

1 个答案:

答案 0 :(得分:4)

event.currentTarget通常是带有jQuery事件的this的值。如上所述in the docs

  

描述:事件冒泡阶段中的当前DOM元素。

演示:http://jsfiddle.net/rhgEB/

虽然event.target仍为#baz,但event.currentTarget会引用当前正在处理的元素;与this相同,没有proxy

* *由machineghost编辑* *

为了节省未来读者的时间,基于事件对象(“this”)生成e等效物的“神奇公式”是:

var fakeThis = e.delegateTarget === e.currentTarget ? e.currentTarget : e.target;