事件监听器能听两个元素吗?你能给处理程序更多参数吗?

时间:2011-01-05 13:28:58

标签: google-closure-library

我正在尝试goog.events.listen(src, type, listener, opt_capt, opt_handler)。 有时我有多个源但总是在事件发生时应该调用的相同事件类型和函数(监听器)。

我应该只为每个来源输入一次,还是有更好的方法来做?

因为我想在我创建监听器的对象中处理这个问题,所以设置opt_handler = this。我认为在我的应用程序中,不可能同时调用两个具有侦听器的事件,所以我让opt_capt = false

在我的JavaScript文件中看起来像:

var htmlElement = goog.dom.getElement(el[0]);
goog.events.listen(htmlElement, goog.events.EventType.CLICK, this.myFunction, false, this);

现在myFunction只将事件作为参数。但我想知道点击了哪个htmlElement。我如何获得这些信息?

2 个答案:

答案 0 :(得分:1)

参数myFunction将采用goog.events.Event类型。其target属性包含实际的事件目标,而currentTarget包含侦听器附加到的对象。

答案 1 :(得分:1)

您应该始终能够通过变量e使用该事件并获取它的目标,这将是您单击的元素。 但是不要将this.myFunction(e)放在goog.events.listen中。 goog.event.myFunction很好,你从一开始就做到了。如果您以后想要将其他参数传递给myFunction(并且可能会做一些讨论),请查看goog.bind示例并查看goog.partial

问候,

goog.events.listen(
    htmlElement,
    goog.events.EventType.CLICK,
    this.myFunction,
    false,
    this
);

//alternative
goog.events.listen(
    htmlElement,
    goog.events.EventType.CLICK,
    goog.bind(myFunction, this)
);



myfunction = function(e) {
    //maybe this
    window.console.log(e.target)

    //or this
    var event = e.getBrowserEvent()
    window.console.log(event.target)

}