【问题标题】:Javascript - programmatically invoking eventsJavascript - 以编程方式调用事件
【发布时间】:2010-11-16 13:59:38
【问题描述】:

假设我使用 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

【问题讨论】:

    标签: javascript javascript-events


    【解决方案1】:

    像往常一样,对于 Internet Explorer,您必须采用一种方式,而对于其他一切,您必须采用正确的方式 ;-)

    对于 IE:

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

    请参阅the MSDN library 了解更多信息。

    对于真正的浏览器:

    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/event 的 Mozilla DOM 事件参考开始

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2012-03-30
        相关资源
        最近更新 更多