目前处理由其他人编写的用于事件处理的代码。有些部分代码我不确定,如果可能的话,想要解释它的含义。
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两次?另外,为什么一个人返回假值而另一个人没有?
我不确定代码的第二部分是做什么的,任何可能的解释?我知道这是事件发生后调用的代码。
答案 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时,将运行代码的第二部分。它再次检查浏览器是否支持某些事件属性,以获取被点击的正确元素。