事件

作者: 我是一只_鱼 | 来源:发表于2017-06-26 20:49 被阅读0次

    题目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); });

    相关文章

      网友评论

          本文标题:事件

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