FE-study

JS-事件

2017-10-09  本文已影响0人  饥人谷_bigJiao

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

1. DOM0级事件处理程序

DOM0级事件处理程序,事件名以'on'开头,因此click事件的事件处理程序就是onclickload事件的事件处理程序就是onload

2. DOM2级事件处理程序

var btn = document.getElementById("myBtn");
btn.addEventListener("click", showMessage, false);

使用DOM2级方法添加事件处理程序时,可以为指定元素添加多个事件处理程序。

var btn = document.getElementById("myBtn");
btn.addEventListener("click", showMessage, false);
btn.addEventListener("click", showMessage2, false);

删除DOM2级事件处理程序方法如下:

btn.removeEventListener("click", showMessage, false);

区别

2:attachEvent与addEventListener的区别?

  1. 参数个数不相同,这个最直观,addEventListener有三个参数,attachEvent只有两个,attachEvent添加的事件处理程序只能发生在冒泡阶段,addEventListener第三个参数可以决定添加的事件处理程序是在捕获阶段还是冒泡阶段处理(我们一般为了浏览器兼容性都设置为冒泡阶段)

  2. 第一个参数意义不同addEventListener第一个参数是事件类型(比如clickload),而attachEvent第一个参数指明的是事件处理函数名称(onclickonload

  3. 事件处理程序的作用域不相同addEventListener的作用域是元素本身,this是指的触发元素,而attachEvent事件处理程序会在全局变量内运行,thiswindow

  4. 为一个事件添加多个事件处理程序时,执行顺序不同addEventListener添加会按照添加顺序执行,而attachEvent添加多个事件处理程序时顺序无规律(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了),所以添加多个的时候,不依赖执行顺序的还好,若是依赖于函数执行顺序,最好自己处理,不要指望浏览器

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

事件冒泡模型.png 事件捕获模型.png DOM事件流.png

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

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

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>前端6班</li>
</ul>
<script>

//1.使用事件代理,把事件监听绑定到父容器上,根据事件的来源进行处理
    
    /*
    var ct = document.querySelector('.ct');
    ct.addEventListener("click",function(e){
      console.log(e.target.innerText);
    })
    */
    
    //2.把事件直接绑定到元素上
    
    var liList = document.querySelectorAll(".ct li")
   
    for (var j = 0; j < liList.length; j ++){
      liList[j].addEventListener("click", function(){
        console.log(this.innerText)
      })
    }
</script>

6:补全代码

<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 addBtnStart = document.querySelector("#btn-add-start");
  var addBtnEnd = document.querySelector("#btn-add-end");
  var input = document.querySelector('.ipt-add-content');
  var container = document.querySelector('.ct');
  var liNodes = document.querySelector('.ct>li');

  var reg = /\S+/;

  addBtnStart.addEventListener('click',function(){
    var startLi = document.createElement('li');
    startLi.innerText = input.value;

    if(reg.test(startLi.innerText)){
      container.insertBefore(startLi,container.firstChild);
    }else{
      console.log("输入非空字符串");
    }
  })


  addBtnEnd.addEventListener('click',function(){
    var endLi = document.createElement('li');
    endLi.innerText = input.value;

    if(reg.test(endLi.innerText)){
      container.appendChild(endLi);
    }else{
      console.log("输入非空字符串");
    }
  })

  container.addEventListener('click',function(e){
        if(e.target.tagName.toLowerCase() === 'li'){
      console.log(e.target.innerText);
    }
  })
</script>

参考:

上一篇下一篇

猜你喜欢

热点阅读