事件

作者: _达斯基 | 来源:发表于2017-10-20 21:32 被阅读0次

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

  • DOM0级事件监听就是把一个方法赋值给一个元素的事件处理程序属性。将这些属性的值设置为一个函数,就可以指定事件处理程序。一个事件只能绑定一次,并且新方法会覆盖老方法。例如btn.onclick=function(){}

  • DOM2级事件监听定义了两个方法用于处理指定和删除事件处理程序的操作:addEventListener、removeEventListener。所有的DOM节点都包含这两个方法,并且它们都接受三个参数:事件类型、事件处理方法、布尔参数。例如addEventListener、removeEventListener。可以选择按照冒泡的顺序处理还是捕获的顺序处理。

2.attachEvent与addEventListener的区别?

  1. 参数个数不相同,这个最直观,addEventListener有三个参数,attachEvent只有两个,attachEvent添加的事件处理程序只能发生在冒泡阶段,addEventListener第三个参数可以决定添加的事件处理程序是在捕获阶段还是冒泡阶段处理(我们一般为了浏览器兼容性都设置为冒泡阶段)
  2. 第一个参数意义不同,addEventListener第一个参数是事件类型(比如click,load),而attachEvent第一个参数指明的是事件处理函数名称(onclick,onload)
  3. 事件处理程序的作用域不相同,addEventListener的作用域是元素本身,this是指的触发元素,而attachEvent事件处理程序会在全局变量内运行,this是window,所以刚才例子才会返回undefined,而不是元素id
  4. 为一个事件添加多个事件处理程序时,执行顺序不同,addEventListener添加会按照添加顺序执行,而attachEvent添加多个事件处理程序时顺序无规律(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了),所以添加多个的时候,不依赖执行顺序的还好,若是依赖于函数执行顺序,最好自己处理,不要指望浏览器

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

IE事件冒泡是指事件信息DOM树中接受事件的最下层开始向上传递直到根节点。DOM2事件传递机制是指先进行事件捕获后进行事件冒泡。事件信息从DOM根节点开始逐层下传到事件发生的目标元素,在达到目标元素后逐层冒泡上传至根节点。

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

DOM浏览器:在DOM2级事件监听的第二个参数即匿名函数内使用e.stopPropagation();可以阻止冒泡,使用e.preventDefault()可以阻止默认事件。
IE浏览器:
window.event.cancelBubble = true;//停止冒泡
window.event.returnValue = false;//阻止事件的默认行为

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

<!DOCTYPE html>
<html lang="en">
    <head>
        <title></title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="css/style.css" rel="stylesheet">
    </head>
    <body>
        <ul class="ct">
            <li>这里是</li>
            <li>饥人谷</li>
            <li>任务09期</li>
        </ul>
    <script>
    $('li').forEach(function(e) {
        e.addEventListener('click',function(){
            console.log(this.innerText)
        })

        
    });
    
    function $(el){
        return document.querySelectorAll(el)
    }

    
    
    </script>
    </body>
</html>

6.补全代码,要求:

当点击按钮开头添加时在<li>这里是</li>元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在最后一个 li 元素后添加用户输入的非空字符串.
当点击每一个元素li时控制台展示该元素的文本内容。

   <script>
            var liNodes = document.querySelectorAll('li');
            var showNodes = document.querySelector('#show');
            var addNode = document.querySelector('#btn');
            var addIpt = document.querySelector('#add-ipt');
            var container = document.querySelector('.container ul')
            var addNode2 = document.querySelector('#btn-2')


            container.addEventListener('click',function(e){
                var target = e.target;
                console.log(target)
                if(target.tagName.toLowerCase()==='li'){
                    showNodes.innerHTML = target.innerHTML;   
                }             
            })//冒泡原理
            addNode.addEventListener('click',function(){
                if(addIpt.value !=''){
                    var node = document.createElement('li')
                    container.appendChild(node)
                    node.innerHTML = addIpt.value
                }
            })
            addNode2.addEventListener('click',function(){
                if(addIpt.value !=''){
                    var node = document.createElement('li')
                    var child = container.children;
                 
                    container.insertBefore(node,child[0])
                    node.innerText = addIpt.value
                }
            })

        
        </script>

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

<!DOCTYPE html>
<html lang="en">
    <head>
        <title></title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style>
        ul {
            margin: 0;
            padding: 0;
        }
        li {
            list-style: none;
            line-height: 1.5;
            border: 1px solid #d4d4d4;
            width: 300px;
            margin-right: 20px;
            background-color: #999;
           
        }
        #show {
            background-color: #444;
            color: white;
            width: 400px;
        }
        .container {
            width: 400px;
            margin :0 auto;
            background: #333;
        }
        img {
            width: 100px;
            height: 100px;
        }
        </style>
    </head>
    <body>
            <ul class="ct">
                    <li data-img="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2852370020,1687368360&fm=27&gp=0.jpg">鼠标放置查看图片1</li>
                    <li data-img="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1637201718,1115833502&fm=27&gp=0.jpg">鼠标放置查看图片2</li>
                    <li data-img="https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2447115921,918476042&fm=27&gp=0.jpg">鼠标放置查看图片3</li>
                </ul>
                <div class="img-preview">
                </div>
                <script>
                //你的代码
                var aImg= document.createElement('img')
                $('.img-preview').appendChild(aImg)
                $$('.ct li').forEach(function(e) {
                    
                    e.addEventListener('mouseenter',function(a){
                        console.log(a)
                        console.log(this)
                       return $('.img-preview img').src = this.getAttribute('data-img')
                    })
                    
                    
                })
                function $$(a){
                    return document.querySelectorAll(a)
                }
                function $(b){
                    return document.querySelector(b)
                }
                </script>

    

      
    </body>
</html>

相关文章

  • JavaScript事件01——事件流

    大纲:概念(事件、事件流)事件流模型(事件冒泡、事件捕获、DOM事件流) 一、概念: 1、事件:事件就是用户或浏览...

  • 事件对象,事件监听,事件冒泡,事件代理

    一、事件对象 二、冒泡事件:(事件从子元素往父级元素向上触发事件)处理兼容问题:主流浏览器:e.stopPropa...

  • 事件总结

    DOM事件主要内容 事件流 事件注册 事件对象 事件分类 事件代理 什么是DOM事件? 事件是某个行为或者触发,比...

  • Javascript事件系统

    本文内容 事件基础 事件监听方式 事件默认行为 事件冒泡与事件捕获 事件绑定与事件委托 事件基础 注意:本文不会深...

  • Javascript事件-事件冒泡,事件捕获,事件监听和事件委托

    事件处理机制 (一)DOM事件流 DOM模型是一个树形结构,在DOM模型中,HTML元素是有层次的。当一个HTML...

  • 【事件】事件流

    1、JavaScript和HTML之间的交互通过事件实现的。2、事件流描述的是从页面中接收事件的顺序。3、IE 和...

  • 【事件】事件对象

    触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的额信息。(包括导致事件的元...

  • 【事件】事件类型

    DOM3 级事件规定了以下几类事件: UI(User Interface,用户界面)事件,当用户与页面上的元素交互...

  • 2018-09-10JQuery高级应用

    JQuery事件 window事件 鼠标事件 键盘事件 表单事件 事件注册语法$(对象).type(fn)type...

  • JS事件

    ?事件的相关术语 事件类型: 鼠标事件、键盘事件事件名称: click、dbclick等事件目标: 表示与发生事件...

网友评论

      本文标题:事件

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