DOM事件

2017-12-10  本文已影响0人  饥人谷_Coziz

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

    // 添加事件处理程序
    var btnClick = document.getElementById('btnClick');
    btnClick.onclick = function showMessage() {
        alert(this.id);
    };
    // 删除事件处理程序
    btn.onclick=null;
    var btnClick = document.getElementById('btnClick');
    var handler=function() {
        alert(this.id);
    }
    // 指定事件处理程序
    btnClick.addEventListener('click', handler, false);
    // 删除事件处理程序
    btnClick.removeEventListener('click', handler, false);

attachEvent与addEventListener的区别

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

IE事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素。



DOM2事件传播:DOM2级事件规定事件流包括三个阶段,事件捕获阶段,处于目标阶段,事件冒泡阶段,首先发生的是事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡阶段。


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

// 阻止事件冒泡
function stopPropgation(e){
  if (e && e.stopPropagation) {
    e.stopPropagation(); // W3C标准
  }else {
    window.event.cancelBubble = true; // IE浏览器
  }
}

// 阻止默认事件
function preventDefault(e){
  if (e && e.stopPropagation) {
    e.preventDefault(); // W3C标准
  }else {
    window.event.returnValue = false; // IE浏览器
  }
}

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

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>任务班</li>
</ul>
<script>
  let ct = document.querySelector('.ct')
  ct.addEventListener('click',function(e){
    console.log(e.target.innerText)  
  })
</script>

补全代码,要求:

<ul class="ct">
    <li>这里是</li>
    <li>饥人谷</li>
    <li>任务班</li>
</ul>
<input id="ipt-add-content" placeholder="添加内容"/>
<button id="btn-add-start">开头添加</button>
<button id="btn-add-end">结尾添加</button>
<script>
  var ct = document.querySelector('.ct');
  var addStartBtn = document.querySelector('#btn-add-start');
  var addEndBtn = document.querySelector('#btn-add-end');
  var ipt = document.querySelector('#ipt-add-content');
  
  ct.addEventListener('click', function(e){
    console.log(e.target.innerText);
  });
  
  addEndBtn.addEventListener('click', function(){
     var li = document.createElement('li');
     if(ipt.value !== '') {
       li.innerText = ipt.value;
       ct.appendChild(li);
     } else {
       alert('内容不能为空');
     }
  });
  
  addStartBtn.addEventListener('click', function(){
     var li = document.createElement('li');
     if(ipt.value !== '') {
       li.innerText = ipt.value;
       ct.insertBefore(li,ct.firstChild);
     }else {
       alert('内容不能为空');
     }
  });
</script> 

补全代码,要求:

<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 ct = document.querySelector('.ct');
  var preview = document.querySelector('.img-preview');

  ct.addEventListener('mouseover', function (e) {
    var target = e.target;
    if (target.tagName.toLowerCase() === 'li') {
      var img = document.createElement('img');
      img.src = target.getAttribute('data-img');
      preview.innerHTML = '';
      preview.appendChild(img);
    }
  });
  ct.addEventListener('mouseout', function (e) {
    var target = e.target;
    if (target.tagName.toLowerCase() === 'li') {
      preview.innerHTML = '';
    }
  });
</script>
上一篇下一篇

猜你喜欢

热点阅读