Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在事件处理程序中重新创建“this”?_Javascript_Jquery - Fatal编程技术网

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

Javascript 如何在事件处理程序中重新创建“this”?,javascript,jquery,Javascript,Jquery,我有一个通过$.proxy预先绑定到特定变量的事件处理程序。因此,当处理程序被触发时,这不是正常值,而是我的预设值 我想使用处理程序的事件参数来恢复它,但它似乎没有直接映射到event.currentTarget、event.target或任何其他事件属性 所以,我试着挖掘jQuery源代码,但是事件回调的内容非常复杂,我无法准确地理解这是什么。有人知道如何仅使用事件参数来模拟jQuery事件处理程序吗 **编辑** 为了澄清,这里有一个例子: var boundThis = {foo: 'ba

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

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

所以,我试着挖掘jQuery源代码,但是事件回调的内容非常复杂,我无法准确地理解这是什么。有人知道如何仅使用事件参数来模拟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);
event.currentTarget通常是jQuery事件的值。如上所述:

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

演示:

当event.target保持为baz时,event.currentTarget引用正在处理的当前元素;这与不使用代理的情况相同

**由MachineHost编辑**

为了节省将来的读者一些时间,基于事件对象e生成等价物的神奇公式是:

event.currentTarget通常是jQuery事件的值。如上所述:

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

演示:

当event.target保持为baz时,event.currentTarget引用正在处理的当前元素;这与不使用代理的情况相同

**由MachineHost编辑**

为了节省将来的读者一些时间,基于事件对象e生成等价物的神奇公式是:


虽然我问的问题很一般,所以示例代码不太相关;将$.proxy-ed函数传递给任何jQuery事件连接都将证明这一点。尽管我问的问题非常一般,但已完成,因此示例代码不太相关;将$.proxy-ed函数传递给任何jQuery事件连接都可以证明这一点。对,event.currentTarget差不多就是答案的一半。另一半是event.target,尽管我对这一切一无所知,可能还有第三块。无论如何,棘手的部分是从事件对象中找出我想要的对象:它不总是currentTarget或always target。@MachineHost event.target是启动事件的元素,它不会随着事件冒泡而改变。event.currentTarget是当前正在处理的元素,在委派事件的情况下是事件绑定到或匹配到的元素。观看演示中的日志,ID会随着事件气泡的出现而改变或保持不变。对,但这!==event.currentTarget或至少不总是。我将试着看一下我的代码,这样我就可以解释需要一个或另一个的例子,我已经这样做了,但我真的认为在事件处理程序中这个设置到底是什么?会是一个众所周知的信息,所以我不认为会是necessary@machineghostFrom:当jQuery调用处理程序时,this关键字是对传递事件的元素的引用;对于直接绑定的事件,这是附加事件的元素;对于委派的事件,这是匹配选择器的元素;我确实看了文件上的,但不知怎么的,我错过了,谢谢你。现在,我们差不多到了,除了最后一件事:从事件对象,我如何确定事件是直接绑定的还是委托的,这样我就可以使用target或currentTarget,视情况而定?对,event.currentTarget差不多是答案的一半。另一半是event.target,尽管我对这一切一无所知,可能还有第三块。无论如何,棘手的部分是从事件对象中找出我想要的对象:它不总是currentTarget或always target。@MachineHost event.target是启动事件的元素,它不会随着事件冒泡而改变。event.currentTarget是当前正在处理的元素,在委派事件的情况下是事件绑定到或匹配到的元素。观看演示中的日志,ID会随着事件气泡的出现而改变或保持不变。对,但这!==event.currentTarget或至少不总是。我将试着看一下我的代码,这样我就可以解释需要一个或另一个的例子,我已经这样做了,但我真的认为在事件处理程序中这个设置到底是什么?会是一个众所周知的信息,所以我不认为会是necessary@machineghostFrom:当jQuery调用处理程序时,this关键字是对传递事件的元素的引用;对于直接绑定的事件,这是附加事件的元素;对于委派的事件,这是匹配选择器的元素;我确实看了文件上的,但不知怎么的,我错过了,谢谢你。所以现在,我们是阿尔姆 在这里,除了最后一件事:从事件对象,我如何确定事件是直接绑定的还是委托的,以便我可以根据需要使用target或currentTarget?
var fakeThis = e.delegateTarget === e.currentTarget ? e.currentTarget : e.target;