如何在Javascript中监听元素方法调用

时间:2008-09-25 16:30:29

标签: javascript listeners

我想听方法调用。

例如,当一个元素被任何东西附加到文档中时,我希望传递该元素以对其进行操作,例如:

//某处

aParent.appendChild(aChild);

//当前者,我定义为侦听器的函数以aChild作为参数调用

有人知道怎么做吗?

5 个答案:

答案 0 :(得分:1)

不知道核心功能是否可行,但您可以随时为要监控的操作创建自己的功能:


function AppendChild(oParent, oChild) {

   // your stuff on oParent

   // append oChild
   oParent.appendChild(oChild)
}

或者,也许修改实际的appendChild(),但这很棘手......

答案 1 :(得分:0)

我知道Dojo Toolkit提供了这项功能。您可以解释here - 跳转到“将功能连接到另一个”部分。如果您有兴趣,可以查看the source of dojo.connect以查看正在发生的事情。

答案 2 :(得分:0)

在Firefox中,您可以重写Node .prototype.appendChild来调用您自己的函数(首先保存原始的appendChild,然后在其中调用它)以执行其他操作。

Node.prototype._appendChild = Node.prototype.appendChild;
Node.prototype.appendChild = function myFunct(el){....; this._appendChild(el);}

Internet Explorer没有实现这些接口(但可能有一种解决方法,可能使用.htc ..)。 IE8将使用Element而不是Node。

答案 3 :(得分:0)

您所描述的是Aspect Oriented programming。在AOP用语中,您的“连接点”将是element.appendChild(),您的“建议”是您希望在每个匹配连接点执行之前(之前和/或之后)执行的函数。

我一直对JavaScript AOP的可能性感兴趣,我刚刚发现这个Aspect Oriented Programming and javascript,看起来很有希望而不需要采用一个大的旧API。 - 我很高兴你提起这件事。我有这方面的用途,如临时日志记录,计时代码段等。

答案 4 :(得分:0)

多个浏览器以不同的方式处理DOM,不幸的是,IE处理事物的方式并不像Mozilla那样强大。最简单的方法是使用像Filini提到的自定义函数。

但是,您也可以将不同的浏览器DOM对象包装在一个外观中,并将其用于所有元素访问。这是一项更多的工作,但您可以以相同的方式处理所有浏览器,并能够轻松添加/删除侦听器。我不确定它是否比自定义函数更有用,但值得一看。