美文网首页
事件监听,事件代理

事件监听,事件代理

作者: 饥人谷_林嘉俊 | 来源:发表于2017-09-09 17:59 被阅读7次

题目1: DOM0 事件和DOM2级在事件监听使用方式上有什么区别?

DOM0级事件,添加多个事件处理程序时, 会出现后面的覆盖前面的这种情况,
而DOM2则不会出现这种情况.
DOM0有两种方式,一种是通过内联方式,另一种是通过on+事件名的方式.
DOM2级事件通过addEventListener和removeEventListener来填加事件监听和删除事件的监听,接受三个参数,事件类型,事件处理方法,布尔值(true表示事件捕获阶段响应.false表示事件冒泡阶段响应.默认false),不能通过removeEventListener来移除匿名函数.

题目2: attachEvent与addEventListener的区别?

  • attachEvent添加的事件只能在冒泡阶段处理,addEventListener可以通过参数来决定处理程序是在冒泡阶段还是在捕获阶段处理.
  • 第一个参数不同,attachEvent第一个参数是on....,比如onclick,而addEventListener是click,没有on.
  • this的指代不同,在attachEvent的函数中this指的是window,而在addEventListener,this指的是被监听的元素.
  • 为一个事件添加多个事件处理程序时,执行顺序不同:addEventListener会按照添加的顺序执行,attachEvent添加多个事件处理程序时,在执行时没有规律.

题目3: 解释IE事件冒泡和DOM2事件传播机制?

  • IE事件冒泡:从发生事件的元素开始,逐步向上传播.
    事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素
image.png
  • DOM2级事件规定事件流包括三个阶段,事件捕获阶段,处于目标阶段,事件冒泡阶段,首先发生的是事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡阶段
image.png

题目4:如何阻止事件冒泡? 如何阻止默认事件?

  • 在IE浏览器中
    可以通过设置cancelBubble=true来阻止事件冒泡,
    通过设置returnValue=false来阻止默认事件.

  • 在非IE浏览器中
    可以用stopPropagation()来阻止事件冒泡和捕获,
    通过preventDefault()来阻止默认行为.

题目5:有如下代码,要求当点击每一个元素li时控制台展示该元素的文本内容。不考虑兼容

<ul class="ct">
  <li>这里是</li>
  <li>饥人谷</li>
  <li>前端6班</li>
</ul>
<script>
//todo ...
var ul = document.querySelector('.ct');
ul.addEventListener('click',function(e){
   if(e.target.tagName.toLowerCase() === 'li'){
    console.log(e.target.innerText);
    }
  },false)

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

当点击按钮开头添加时在<li>这里是</li>元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在最后一个 li 元素后添加用户输入的非空字符串.
当点击每一个元素li时控制台展示该元素的文本内容。

<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 ul = document.querySelector('.ct');
var content = document.querySelector('.ipt-add-content');
var start = document.querySelector('#btn-add-start');
var end = document.querySelector('#btn-add-end');

ul.addEventListener('click',function(e){
   if(e.target.tagName.toLowerCase() === 'li'){
    console.log(e.target.innerText);
    }
  },false)

start.addEventListener('click',function(){
    if(/^\s*$/.test(content.value)){       //正则判断输入是否为空字符串
        console.log('输入为空字符');
    }else{
        var newLi = document.createElement('li');
        newLi.innerText = content.value;
        ul.insertBefore(newLi,ul.firstElementChild);  //添加到第一个元素之前
      }
    },false)

end.addEventListener('click',function(){
    if(/^\s*$/.test(content.value)){
        console.log('输入为空字符');
    }else{
        var newLi = document.createElement('li');
        newLi.innerText = content.value;
        ul.appendChild(newLi,ul.lastElementChild);
      }
    },false)
</script>

题目7: 补全代码,要求:当鼠标放置在li元素上,会在img-preview里展示当前li元素的data-img对应的图片。

<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 ul = document.querySelector('.ct');
var imgPreview = document.querySelector('.img-preview');
ul.addEventListener('mouseover',function(e){
  if(e.target.tagName.toLowerCase() === 'li'){
    var img = e.target.getAttribute('data-img');
    imgPreview.innerHTML = '<img src = "' + img + '">';
  }
},false)
</script>

相关文章

  • 事件监听,事件代理

    题目1: DOM0 事件和DOM2级在事件监听使用方式上有什么区别? DOM0级事件,添加多个事件处理程序时, 会...

  • 事件监听-事件代理

    DOM0 事件和DOM2级在事件监听使用方式上有什么区别?Dom0中的事件处理函数DOM0中通过on开头加上事件,...

  • 封装一个通用的事件监听函数

    封装一个通用的事件监听函数,可实现普通的事件监听,也可实现事件委托(事件代理)

  • iOS控制器手势左滑返回监听笔记

    协议声明 代理设置 事件监听

  • js事件深入学习

    JavaScript的事件机制包含,事件绑定、事件监听、事件委托(事件代理)等 js中的事件流 ① .冒泡:当下级...

  • 事件监听事件代理

    DOM0 事件和DOM2级在事件监听使用方式上有什么区别? Dom0中的事件处理函数DOM0中通过on开头加上事件...

  • iOS监听文集目录

    监听事件综述blockdelegate(代理)NSNotificationCenterNSNotification...

  • zj9 事件

    事件模型、事件冒泡、事件捕获、事件代理、阻止默认事件、事件兼容等 题目1: DOM0 事件和DOM2级在事件监听使...

  • 事件对象,事件监听,事件冒泡,事件代理

    一、事件对象 二、冒泡事件:(事件从子元素往父级元素向上触发事件)处理兼容问题:主流浏览器:e.stopPropa...

  • 手写通用的事件监听函数

    前言 在问题前,需要先理解事件冒泡、事件代理 可参考文章【事件代理】 动态数据列表里,如何监听每条数据的点击? 具...

网友评论

      本文标题:事件监听,事件代理

      本文链接:https://www.haomeiwen.com/subject/evwojxtx.html