0

我正在尝试使用闭包库来构建一个小应用程序。我正在尝试通过以下代码使用事件委托:

var dom_ = goog.dom.$('targetelementid');
goog.events.listen( dom_, goog.events.EventType.CLICK, function( e ) {
  console.log( e );
}, false);

问题是,当事件被调度并执行处理函数时,生成的对象 (goog.events.BrowserEvent) 的 target 和 currentTarget 属性设置为 null。我不明白为什么会这样。

如果我使用添加 (with) 的常规侦听器,则addEventListener传递给处理函数的事件具有正确设置的目标。

当事件对象中似乎没有指定目标时,有关如何在闭包库代码中使用事件委托模式的任何注释?

4

2 回答 2

1

情况并非如此,事件具有目标和处理程序中可用时所需的所有其他内容,但是在 goog.events 中的所有注册处理程序都用尽之后,事件对象被释放(即其所有属性都被删除/ null-ed) 并且由于现代 Web 浏览器控制台实现显示对象的“实时”视图,因此该对象似乎是空的。

提示:使用“调试器;” 在您有疑问停止 JavaScript 执行并在调试器中打开堆栈的地方的概念。

于 2012-10-03T12:38:16.387 回答
0

尝试使用范围对象(这是 addEventListener 在后台执行的操作)来扩充您的代码,因为如果“this”是分派事件的对象,则目标无关紧要。

var dom_ = goog.dom.$('targetelementid');
goog.events.listen( dom_, goog.events.EventType.CLICK, function( e ) {
  console.log( e );
}, false, this);

注意最后的“this”。

于 2012-02-26T11:56:12.253 回答