事件

题目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浏览器兼容问题。

图片.png

题目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事件冒泡
图片.png

代码读取流程: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事件传播机制
图片.png
图片.png
图片.png

读取代码流程: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>

点击效果:

图片.png

题目6: 补全代码,要求:

图片.png
    <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>
图片.png

题目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>
图片.png

题目8: 在 github 上创建个人项目,把视频里事件兼容的函数写法放入项目,在 Readme.md里描述项目(选做题目)

简书博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 声明:本文来源于http://www.webzsky.com/?p=731我只是在这里作为自己的学习笔记整理一下(...
    angryyan阅读 11,949评论 1 6
  • 1.何谓事件 用户和网页交互时的行为,动作,称之为事件; 2.监视事件 现实生活中,为了监视车辆是否违章,通过在红...
    草鞋弟阅读 3,887评论 0 0
  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 5,031评论 3 11
  • DOM0级和DOM2级在事件监听使用方式上有什么区别? DOM0级事件监听:用JavaScript指定事件处理程序...
    LeeoZz阅读 2,962评论 0 1
  • 事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、...
    徐国军_plus阅读 3,738评论 0 2

友情链接更多精彩内容