Javascript - 以编程方式调用事件

Roy*_*ang 3 javascript javascript-events

假设我使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*itz 11

像往常一样,你必须为Internet Explorer做一种方式,并为其他一切做正确的方法;-)

对于IE:

document.getElementById("thing_with_mouseover_handler").fireEvent("onmouseover");
Run Code Online (Sandbox Code Playgroud)

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

对于真正的浏览器:

var event = document.createEvent("MouseEvent");
event.initMouseEvent("mouseover", true, true, window);
document.getElementById("thing_with_mouseover_handler").dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

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

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