3

假设我使用 addEventListener 或 attachEvent(取决于浏览器)向对象添加事件;以后可以以编程方式调用这些事件吗?

使用如下对象添加/删除事件处理程序:

var Event = {
    add: function(obj,type,fn) {
        if (obj.attachEvent) {
            obj.attachEvent('on'+type,fn);
        } else {
            obj.addEventListener(type,fn,false);
        }
    },
    remove: function(obj,type,fn) {
        if (obj.detachEvent) {
            obj.detachEvent('on'+type,fn);
        } else {
            obj.removeEventListener(type,fn,false);
        }
    }
}

还是我需要存储每个处理程序的副本并只添加一个 Event.invoke(...) 函数?

编辑:另外,jQuery 不是一个选项:D

4

2 回答 2

11

像往常一样,您必须对 Internet Explorer 使用一种方法,而对其他所有方法都使用正确的方法 ;-)

对于 IE:

document.getElementById("thing_with_mouseover_handler").fireEvent("onmouseover");

有关详细信息,请参阅MSDN 库

对于真正的浏览器:

var event = document.createEvent("MouseEvent");
event.initMouseEvent("mouseover", true, true, window);
document.getElementById("thing_with_mouseover_handler").dispatchEvent(event);

请注意,虽然第二种基于标准的方法似乎更冗长,但它也更加灵活:查看文档,从https://developer.mozilla.org/en/DOM/的 Mozilla DOM 事件参考开始事件

尽管仅与您尝试做的事情相关(它与自定义事件有关,而不是正常事件)Dean Edwards 在http://dean.edwards.name/weblog/2009/03/callbacks-vs有一些示例代码-events/可能值得一看。

于 2009-08-04T10:14:30.860 回答
1

您不能创建完成所需工作的函数,从事件中运行这些函数,然后在需要时运行这些相同的函数吗?

于 2009-08-04T06:21:16.367 回答