事件

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

  • DOM0级方法指定的事件处理程序被认为是元素的方法,就是将一个函数赋值给一个事件处理程序属性(每个元素包括window和document都有自己处理程序的属性)。例如:onclick、onmouseover、onmouseout等。因此,这时候的事件处理程序是在元素的作用域中执行的,DOM0级事件只能覆盖,不会连续触发。
  • DOM2级事件’定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()和removeEventListener();所有的DOM节点都包含这两种方法。
    它们都接受3个参数:要处理的事件名,事件处理程序的函数,和一个布尔值。 最后一个参数:如果为true,表示在捕获阶段调用事件处理程序,如果是false,表示在冒泡阶段调用事件处理程序,DOM2级事件可以连续触发。

题目2: attachEvent与addEventListener的区别?

  • attachEvent (不支持addEventListener的旧IE浏览器特有)
    • 只有两个参数(函数名、)
  • 只能以冒泡事件触发
  • 作用域: 全局变量 this 指向window
  • 指定多个同类型事件时,执行顺序无规律(如少量方法还会按顺序执行)
  • addEventListener
  • 三个参数(事件类型、方法、布尔值)
  • 作用域: 元素自身, this 指触发元素
  • 指定多个同类型事件时,按添加顺序执行

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

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

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

  • stopPropagation()方法可以停止事件在DOM层次的传播,即取消进一步的事件捕获或冒泡。

  • 要阻止事件的默认行为,可以使用preventDefault()方法,前提是cancelable值为true

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

var lis = document.querySelector('.ct'). querySelectorAll('li'); for (var i = 0;i<lis.length; i++) { lis[i].addEventListener('click',function() { console.log(this.innerText); }) }

var ct = document.querySelector('.ct'); ct.addEventListener('click',function(e) { console.log(e.target.innerText); })

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

当点击按钮开头添加时在<li>这里是</li>元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在最后一个 li 元素后添加用户输入的非空字符串.
当点击每一个元素li时控制台展示该元素的文本内容。
var content = document.querySelector('.ipt-add-content'); var start = document.querySelector('#btn-add-start'); var end = document.querySelector('#btn-add-end'); var ct = document.querySelector('.ct'); end.addEventListener('click',function(){ var li = document.createElement('li'); li.innerText = content.value; if(li.innerText !=''){ ct.appendChild(li); } }); start.addEventListener('click',function(){ var li = document.createElement('li'); li.innerText = content.value; if(li.innerText !=''){ ct.appendChild(li); } ct.insertBefore(li,ct.firstChild); }); ct.addEventListener('click',function(e){ if(e.target.tagName.toUpperCase()==='LI') console.log(e.target.innerText); });

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

var ct = document.querySelector('.ct'); var imgPre= document.querySelector('.img-preview'); var image = document.createElement('img'); ct.addEventListener('mouseover',function(e) { var path = e.target.getAttribute('data-img'); image.setAttribute('src',path); imgPre.appendChild(image); });

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答 一、dom对象的innerText和innerHTML有什么区别? innerTextinnerText是一...
    婷楼沐熙阅读 427评论 0 0
  • DOM0级和DOM2级在事件监听使用方式上有什么区别? DOM0级事件监听:用JavaScript指定事件处理程序...
    LeeoZz阅读 389评论 0 1
  • 1.dom对象的innerText和innerHTML有什么区别? innerText是一个可写属性。将写入的内容...
    candy252324阅读 558评论 0 0
  • 1.dom对象的innerText和innerHTML有什么区别? innerText是一个可写属性,返回元素内包...
    GarenWang阅读 466评论 0 0
  • 阳朔 小龙女 意想不到 1.最近我总是比闹钟铃响之前先醒来 2.依恒集了10个能量小票了想换水彩笔,却发现能量小票...
    龙之蹊阅读 374评论 0 0