我有一个预先绑定到特定变量的事件处理程序(通过$.proxy
)。因此,当触发处理程序时,this
不是正常值,而是我的预绑定值。
我想使用处理程序的this
参数恢复event
,但this
似乎没有直接映射到event.currentTarget
,event.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);
答案 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;