javascript - 将事件添加到 DOM 元素时,此代码如何工作?

标签 javascript events

我对 if (obj.attachEvent) {...} block 中的代码感到困惑。我在查看此页面时发现了这个示例:http://codebits.glennjones.net/cheatsheet/javascript.htm#events

无论如何,有人可以解释一下这段代码在做什么吗?我假设 obj 是一个 DOM 元素,type 是事件的类型(例如 clickhover ),fn 是回调函数。

function addEvent(obj, type, fn) {
    if (obj) {
        if (obj.attachEvent) {
            obj['e' + type + fn] = fn;
            obj[type + fn] = function () { obj['e' + type + fn](window.event); };
            obj.attachEvent('on' + type, obj[type + fn]);
        } else {
            obj.addEventListener(type, fn, false);
        }
    }
};

我总是使用以下代码来执行跨浏览器事件附件(没有 jQuery)。上述方法比我所做的更好吗?

function attachEvent(element, type, fn) {
    if (element.addEventListener) {
        element.addEventListener(type, fn, false);
    } else if (element.attachEvent) {
        element.attachEvent('on' + type, fn);
    }
};

最佳答案

在下面的代码中注释:

if (obj.attachEvent) {  //if the browser supports the attachEvent method
    obj['e' + type + fn] = fn; //store the handler
    obj[type + fn] = function () { obj['e' + type + fn](window.event); }; //create the callback that invokes the handler stored above
    obj.attachEvent('on' + type, obj[type + fn]); //Attach an event handler to the on<event>, such as onclick
} else {
    obj.addEventListener(type, fn, false); //otherwise, default to browsers supporting addEventListener
}

关于javascript - 将事件添加到 DOM 元素时,此代码如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8727893/

相关文章:

javascript - 如何在 JavaScript 中旋转色调

javascript - 为 mousemove 事件添加延迟

javascript - 查询 : Set delay for each iteration

javascript - nodejs + jsdom,jQuery 奇怪的行为

javascript - 组件之间的数据传输

events - 通过 `CloudBlockBlob` 类监控上传/下载进度?

javascript - 是什么导致绑定(bind)变慢?

java - SWT 中的鼠标事件

javascript - 使用分页每页显示五个帖子不起作用

javascript - jquery/javascript 禁用表格单元格中的按钮