addeventListener和attachEvent

时间:2014-10-28 14:27:03

标签: javascript function events

目前处理由其他人编写的用于事件处理的代码。有些部分代码我不确定,如果可能的话,想要解释它的含义。

if (div.addEventListener) {
        div.addEventListener("click", handleClick, false);
    } else if (div.attachEvent) {
        div.attachEvent("click", handleClick);
    };

function handleClick(e) {
    var evt = e || window.event;
    var target;
    if (evt.target) {
        target = evt.target;
    } else {
        target = evt.srcElement;
    }
    alert("You clicked on " + target.id);
};

我知道它正在检查是否有事件发生,但为什么addEventListener和attachEvent两次?另外,为什么一个人返回假值而另一个人没有?

我不确定代码的第二部分是做什么的,任何可能的解释?我知道这是事件发生后调用的代码。

3 个答案:

答案 0 :(得分:2)

"的addEventListener"不适用于IE(旧版本),IE(旧版本)和#34; attachEvent"工作,所以这里检查是否可以使用哪个功能,因此可以使用它。

答案 1 :(得分:0)

  

为什么addEventListener和attachEvent两次?

它没有。

它测试该属性是否有值,如果是,则调用存储在属性中的函数。

  

另外,为什么一个人返回一个假值而这个假设没有呢?

都不会返回假值。其中一个false作为第三个参数传入。它们是不同的功能,不会以同样的方式工作。

答案 2 :(得分:0)

if (div.addEventListener) {
    div.addEventListener("click", handleClick, false);
} else if (div.attachEvent) {
    div.attachEvent("click", handleClick);
};

只会发生其中一个(它是一个IF声明)。它首先检查浏览器是否支持addEventListener

它传入的false参数是useCapture参数:

" addEventListener中的第三个,现在是可选的参数是“useCapture”,字面意思是在“捕获”而不是“冒泡”时触发事件。当事件附加到元素时,一旦事件完全冒泡到文档,它就会触发。但是,如果将useCapture标志设置为true,则事件将在捕获时触发,而不是等待事件完全冒泡DOM树。" - 来自http://benhowdle.im/useCapture-demystified.html

当用户单击DIV时,将运行代码的第二部分。它再次检查浏览器是否支持某些事件属性,以获取被点击的正确元素。