题目1: DOM0 事件和DOM2级在事件监听使用方式上有什么区别?
DOM0级事件
var btn=document.querySelector("#btn");
btn.onclick=function(){
alert(1);
}
优点:简单,兼容所有浏览器
缺点:一个事件处理程序只能对应一个处理函数
DOM1级事件
var btn=document.querySelector("#btn");
//非IE
btn.addEventListener("click",function(){
alert(1);
},false)
//IE
btn.attrachEvent("onclick",function(){
alert(1);
})
优点:同一个事件处理程序可以对应多个函数
缺点:关于事件的内置函数 老IE浏览器存在兼容问题,老IE浏览器有一套自己的事件内置函数,
再coding事件程序时,需要多方面考虑到老IE浏览器兼容问题。
题目2: attachEvent与addEventListener的区别?
区别:
1,attachEvent只能兼容IE6,7,8上面,addEventListener只能兼容非IE6,7,8和非IE浏览器
2,事件名的写法不同,事件名加on和不加on,比如点击事件:btn.attachEvent("onclick",fn) btn.addEventListener("click",fn)
3,attachEvent有两个参数,addEventListener可以有三个参数,addEventListener的前两个参数相同,第三个参数是true或false,默认false,false指冒泡阶段触发事件,ture指捕获阶段触发函数;因此attachEvent的事件函数都添加到冒泡阶段
4,事件处理函数里面的this指向不同,attachEvent调用的函数里面的this指向window,addEventListener调用的函数里面的this指向触发该事件的节点
5,attachEvent与addEventListener在执行绑定函数的顺序不一样,前者倒序执行,后者按顺序执行
题目3: 解释IE事件冒泡和DOM2事件传播机制?
<Document onclick="alert(4)">
<html onclick="alert(3)">
<head></head>
<body onclick="alert(2)">
<div onclick="alert(1)">
</div>
</body>
</html>
单击按钮
IE事件冒泡
代码读取流程:button->window
读取代码开始就执行button的点击事件,依次弹出 1->2->3->4->5
<html>
<body>
<div>
<button id="btn"></button>
</div>
</body>
<script>
document.html.addEventListener("click",function(){
alert(4);
},false)
document.body.addEventListener("click",function(){
alert(3);
},false)
document.div.addEventListener("click",function(){
alert(2);
},false)
document.querySelector("#btn").addEventListener("click",function(){
alert(1);
},false)
</script>
</html>
DOM2事件传播机制
读取代码流程:window->button->window window->button:捕获阶段 button->window:冒泡阶段
Dom2事件触发默认冒泡阶段处理函数,输出:1->2->3->4
如果把addEventListener的第三个参数改成true,意思是捕获阶段处理函数,输出:4->3->2->1
题目4:如何阻止事件冒泡? 如何阻止默认事件?
阻止事件冒泡
function stopPorpagation(e){
if(e.stopPorpafation){
//流行浏览器
e.stopPropagation();
}else{
//老IE浏览器
e.cancleBubble=true;
}
}
阻止默认事件
function preventDefault(e){
if(e.preventDefault){
//流行浏览器
e.preventDefault();
}else{
//老IE浏览器
e.returnValue=true;
}
}
题目5:有如下代码,要求当点击每一个元素li时控制台展示该元素的文本内容。不考虑兼容
<body>
<ul class="ct">
<li>这里是</li>
<li>饥人谷</li>
<li>前端6班</li>
</ul>
<script>
var Oct=document.querySelector(".ct");
Oct.addEventListener("click",function(e){
console.log(e.target.innerText);
})
</script>
</body>
点击效果:
题目6: 补全代码,要求:
<body>
<ul class="ct">
<li>这里是</li>
<li>饥人谷</li>
<li>任务班</li>
</ul>
<input class="ipt-add-content" placeholder="添加内容"/>
<button id="btn-add-start">开头添加</button>
<button id="btn-add-end">结尾添加</button>
<script>
var Oct=document.querySelector(".ct");
var Oipt_add_content=document.querySelector(".ipt-add-content")
var Obtn_add_start=document.querySelector("#btn-add-start");
var Obtn_add_end=document.querySelector("#btn-add-end");
Obtn_add_start.addEventListener("click",function(){
var newli=document.createElement("li");
newli.innerText=Oipt_add_content.value;
Oct.insertBefore(newli,Oct.firstChild);
});
Obtn_add_end.addEventListener("click",function(){
var newli=document.createElement("li");
newli.innerText=Oipt_add_content.value;
Oct.appendChild(newli);
});
Oct.addEventListener("click",function(e){
console.log(e.target.innerText);
});
</script>
</body>
题目7: 补全代码,要求:当鼠标放置在li元素上,会在img-preview里展示当前li元素的data-img对应的图片。
<body>
<ul class="ct">
<li data-img="1.png">鼠标放置查看图片1</li>
<li data-img="2.png">鼠标放置查看图片2</li>
<li data-img="3.png">鼠标放置查看图片3</li>
</ul>
<div class="img-preview"></div>
<script>
var Oct=document.querySelector(".ct");
var Oimg_preview=document.querySelector(".img-preview");
Oct.addEventListener("mouseover",function(e){
var getAb=e.target.getAttribute("data-img");
var Oimg=document.createElement("img");
Oimg.setAttribute("src","img/"+getAb);
Oimg_preview.innerHTML=null;
Oimg_preview.appendChild(Oimg);
})
</script>
</body>