事件

1.DOM事件和DOM2级在事件监听使用方式上有啥区别?

事件监听器也叫事件处理程序,是为了响应某个事件的方法

  • DOM事件监听方式
    1.HTML内联方式
 <input type="button" value="Click Here" onclick="alert('Clicked!')">

2.JavaScript指定事件处理程序
把一个方法赋值给一个元素的事件处理程序属性

<input id="btnClick" type="button" value="Click Here2">
<body>
<script>
var btnClick=document.getElementById('btnClick');
btnClick.onclick=function shoeMessage(){
    alert(this.id);
}
</script>
  • DOM2事件监听方式
    DOM2事件处理程序,定义了两个方法用于处理指定和删除事件处理程序的操作;所有的DOM方法都包含这两个方法,并且接受三个参数
    1.addEventListener
    2.removeEventListener
    参数:
    1.事件类型(click,mouseover....)
    2.事件处理方法
    3.true/false(默认值为false,冒泡阶段才触发)

      var btnClick=document.getElementById('btnClick');
      btnClick.addEventListener('click',function(){
      alert(this.id);
      })
    

2.attachEvent和addEventListener的区别是什么?

addEventListener: 是DOM2级获取事件处理程序的方法,它包含三个参数(事件类型、事件处理方法、布尔参数true/false-默认值为false即是冒泡阶段触发)
attachEvent:IE浏览器事件处理程序方法,同时接收两个参数:(事件处理程序名称、事件处理程序方法)

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

IE事件冒泡:从点击最具体的逐步往外冒泡,IE有且仅有事件冒泡机制
DOM2级事件:包含事件捕获阶段、处于目标阶段、事件冒泡阶段,大部分浏览器都支持DOM2事件流,IE除外;它包含的三个参数(事件类型、事件方法、布尔值)中的布尔值决定了该方法在那个阶段触发;默认值false在冒泡阶段触发,true在捕获阶段触发。

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

  • IE事件模型中:
    1.如何阻止事件冒泡?
    对event对象下的cancelBubble进行赋值
    2.如何阻止默认行为?
    对event对象下的returnValue进行赋值

  • DOM2事件流中
    1.如何阻止事件冒泡?
    对event对象使用stopPropagation()方法
    2.如何阻止默认事件?
    对event对象使用preventDefault()方法

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

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

代码

function $(e){
    if(document.querySelectorAll(e).length > 1){
        return document.querySelectorAll(e);
    }else{
        return document.querySelector(e);
    }
}
var li = $('li')
for(var i = 0; i < li.length; i ++){
    li[i].addEventListener('click', function(){
        console.log(this.innerText)
    })
}

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>
      //你的代码
      </script>
    

代码

// 封装一个函数,用来获取相对应的DOM-node
function $(ele){
if(document.querySelectorAll(ele).length>1){
    return document.querySelectorAll(ele)
}
else{
    return document.querySelector(ele)
}
}


var star=$('#btn-add-start');
var end=$('#btn-add-end');
var content=$('.ipt-add-content');
var ct=$('.ct');
var li=$('.ct>li');



// 点击尾部添加

end.addEventListener('click',function(){
var li=document.createElement('li');
ct.appendChild(li);
li.innerText=content.value;
content.value='';  //归零清空输入框内容
})

// 点击头部添加

star.addEventListener('click',function(){
var li=document.createElement('li');
ct.insertBefore(li,ct.firstChild);
li.innerText=content.value;
content.value='';
})

// 点击console文本内容
li.forEach(function(ele){
ele.addEventListener('click',function(){
    console.log(ele.innerText)
    })

})

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>
    //你的代码
    </script>

代码

function $(ele){
        if(document.querySelectorAll(ele).length>0){
            return document.querySelectorAll(ele);
        }
        else{
            return document.querySelector(ele);
        }

    }


    var ct=$('.ct');
    var ImgPreview=$('.img-preview');
    var list=$('.ct>li');


    list.forEach(function(ele){


        
        ele.addEventListener('mouseenter',function(){
            var img=document.createElement('img');
            img.src=ele.getAttribute('data-img');
            ImgPreview[0].appendChild(img);
        })
        ele.addEventListener('mouseleave',function(ele){
            ImgPreview[0].innerHTML=''
        })
    })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 1,296评论 3 11
  • 如何批量操作 css 如何获取 DOM 计算后的样式 使用getComputedStyle获取元素计算后的样式 实...
    _Dot912阅读 596评论 1 3
  • 事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、...
    徐国军_plus阅读 609评论 0 2
  • 一、问答 1. dom对象的innerText和innerHTML有什么区别? innerHTML: 也就是从对象...
    饥人谷_罗伟恩阅读 648评论 0 2
  • 题目1: DOM0 事件和DOM2级在事件监听使用方式上有什么区别? 事件处理程序我们也称之为事件侦听器(list...
    Taaaaaaaurus阅读 185评论 0 1