如何在 JavaScript 事件处理程序中引用对象?
注意:这个问题使用了 jQuery 但问题与 jQuery 无关!
好的,我有这个对象:
var box = new BigBox();
这个对象有一个名为 Serialize()
的方法:
box.AddToPage();
这是方法 AddToPage()
:
function AddToPage()
{
$('#some_item').html("<div id='box' onclick='this.OnClick()'></div>");
}
上面的问题是 this.OnClick ()
(这显然不起作用)。我需要 onclick
处理程序来调用 BigBox
类的成员。我该怎么做?
对象如何在事件处理程序中引用自身?
Note: This question uses jQuery but the question has nothing to do with jQuery!
Okay so I have this object:
var box = new BigBox();
This object has a method named Serialize()
:
box.AddToPage();
Here is the method AddToPage()
:
function AddToPage()
{
$('#some_item').html("<div id='box' onclick='this.OnClick()'></div>");
}
The problem above is the this.OnClick()
(which obviously does not work). I need the onclick
handler to invoke a member of the BigBox
class. How can I do this?
How can an object refer to itself in an event handler?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您应该使用 jQuery 附加处理程序:
为了强制在对象的上下文中调用事件处理程序(并传递参数),您需要添加一个正确调用处理程序的匿名函数。否则,处理程序中的
this
关键字将引用 DOM 元素。You should attach the handler using jQuery:
In order to force the event handler to be called on the context of your object (and to pass parameters), you need to add an anonymous function that calls the handler correctly. Otherwise, the
this
keyword in the handler will refer to the DOM element.不要使用内联代码添加事件处理程序。
编辑:
另一种方式(避免额外的选择):
编辑(响应“如何传递参数”);
我不确定你想传递什么参数,但是..
Don't add event handlers with inline code.
EDIT:
Another way (avoids the extra select):
EDIT (in response to "how to pass parameters");
I'm not sure what params you want to pass, but..
在 jQuery 1.4 中,您可以使用代理。
您还可以使用手动关闭:
或者,最简单的是,但需要一些 帮助在尚不支持它的浏览器中实现(这是 ECMAScript 第五版功能):
In jQuery 1.4 you could use a proxy.
You can also use a manual closure:
Or, most simply of all, but requiring some help to implement in browsers that don't yet support it (it's an ECMAScript Fifth Edition feature):
如果您使用的是 jQuery,那么您可以将代码与标记分开(旧的关注点分离),如下所示
您只需为所有 ID 为 box 的 div 添加一次单击处理程序。由于单击是一个匿名函数,因此它会获取其所在函数的范围,从而访问框实例。
If you are using jQuery, then you can separate your code from your markup (the old seperation of concerns thing) like this
You only need to add the click handler once for all divs with id of box. And because the click is an anonymous function, it gets the scope of the function it is placed in and therefore access to the box instance.