可重用的Javascript事件对象

时间:2011-08-11 21:48:50

标签: javascript mouseevent event-dispatching

我正在制作鼠标点击事件,我正试图连续几次将它发送到某个节点。为此,我使用相同的MouseEvent对象,由于某种原因,这种方法不起作用。然而,当我每次手动创建事件时,系统工作。有谁知道这种行为的原因是什么? 我试图改变timeStamp,但问题仍然存在。我可以像之前提到的那样解决问题,但我对这个MouseEvent以及相应的调度和处理子系统如何工作感兴趣。我在MDC页面上找到的MouseEvent规范似乎缺少很多信息。

Tnx的帮助!

3 个答案:

答案 0 :(得分:6)

这实际上是一种安全机制,不允许调度之前调度过的事件。事件总是有与之关联的其他数据,例如它是来自可信来源(用户的键盘而不是JavaScript代码)。一些攻击(主要是针对MSIE,因为它有可变的事件对象)正在使用它 - 它们捕获了一个受信任的事件,更改了它并在其他地方再次发送它(可能并不总是需要更改,在一个不同的元素上调度它足以进行某些攻击) 。最终,不允许重新安排事件被证明是最佳解决方案。毕竟,这个功能并不是真正需要的:创建一个具有相同属性的新事件对象(减去隐藏数据)并不是很难。

这个领域的所有安全问题都与文件输入控制有关。前段时间,Firefox决定彻底改变文件输入UI,不允许直接输入文件名。我想知道这种变化是否使事件的重新分配成为非问题。我怀疑任何人都愿意冒险再次冒这种蠕虫的风险。

答案 1 :(得分:1)

我认为你不能重用相同的MouseEvent对象的原因是因为事件系统在事件对象中维护了一些内部状态,因此它们可以实现冒泡和取消等操作。您可能只需要坚持创建不同的事件对象。

阅读Document Object Model Events可以让您更好地了解DOM事件系统的工作原理。

答案 2 :(得分:0)

不知道你现在生病了什么只是假设。

制作一个事件功能:

function clickEvent(event) {
    //do something
}

附上它:

obj.onclick = clickHandler;

您可以多次对多个对象执行此操作。