2

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

我想this使用处理程序的event参数进行恢复,但this似乎没有直接映射到event.currentTarget,event.target或任何其他事件属性。

因此,我尝试挖掘 jQuery 源代码,但事件回调的东西非常复杂,我无法弄清楚到底this设置了什么。有谁知道如何this仅使用 event 参数来模拟 jQuery 事件处理程序?

* * 编辑 * *

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

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

1 回答 1

4

event.currentTarget通常是thisjQuery 事件的值。如文档中所述

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

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

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

* * 由机器鬼编辑 * *

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

var fakeThis = e.delegateTarget === e.currentTarget ? e.currentTarget : e.target;
于 2012-07-03T01:25:18.070 回答