zoukankan      html  css  js  c++  java
  • web前端学习(四)JavaScript学习笔记部分(5)-- 事件流详解

    1、JS事件详解-事件流

    1.1、事件流

    1.事件流:

      描述的是在页面中接受事件的顺序

    2.事件冒泡:

      由最具体的元素接收,然后逐级上传播至最不具体的节点(文档)

    3.事件捕获:

      最不具体的节点先接收事件,而最具体的节点应该是最后接收事件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div>
        <button id="btn"></button>
        <!--冒泡的方式
        先点击btn第一接收的应该是按钮,
        然后应该是包含他的div,再就是html标签,
        最后应该就是html文档了
    
        事件的捕获:
        最先接收的是文档型接收,然后就是div接收,
        最后才是最具体的button接收-->
    </div>
    </body>
    </html>

    2、JS事件详解-事件处理

    1.HTML事件处理:

      直接添加到HTML结构中

    2.DOM0级事件处理

      把一个函数赋值给一个事件处理程序属性

      注:只能添加一个事件处理程序;

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="div">
        <button id="btn">按钮</button>
    </div>
    <script>
        var btn = document.getElementById("btn");
        btn.onclick = function(){alert("DOM0级事件处理111");}
        //第一个事件被覆盖。
        // DOM0级事件处理程序只会处理最后一个事件处理程序
        btn.onclick = function(){alert("DOM0级事件处理222");}
    
        // btn.onclick = null;/*将DOM0级事件处理程序清除*/
    </script>
    </body>
    </html>

    3.DOM2级事件处理

      addEventListener("事件名","事件处理函数","布尔值");

      true:事件捕获

      false:事件冒泡

      removeEventListener();

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="div">
        <button id="btn">按钮</button>
    </div>
    <script>
        var btn = document.getElementById("btn");
        btn.addEventListener("click",demo1);
        btn.addEventListener("click",demo2);
        btn.addEventListener("click",demo3);
    
        function demo1(){
            alert("DOM2级事件处理程序1");
        }
        function demo2(){
            alert("DOM2级事件处理程序2");
        }
        function demo3(){
            alert("DOM2级事件处理程序3");
        }
        btn.removeEventListener("click",demo2);
    </script>
    </body>
    </html>

      DOM2级事件处理程序处理方便。

    4.IE事件处理程序

      attachEvent

      detachEvent

      这两个是比IE8低的版本使用的语句。

     使用如下代码可解决问题:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div>
    <button id="btn">按钮</button>
    </div>
    <script>
        var btn = document.getElementById("btn");
    
        if(btn.addEventListener){
    
            // alert("1");
            // btn.onclick = demo();
            btn.addEventListener("click",demo);
        }else if(btn.attachEvent){
            alert("2");
            btn.attachEvent("onclick",demo);
        }else{
            alert("3");
            btn.onclick = demo;
        }
        function demo(){
            alert("111");
        }
    
    
    </script>
    </body>
    </html>

    3、JS事件详解-事件对象

    3.1、事件对象:

      在触发DOM事件的时候都会产生一个对象

    3.2、事件对象event

      1.type:获取事件类型

      2.target:获取事件目标

      3.stopPropagation:阻止事件冒泡

      4.preventDefault:阻止事件默认行为

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="div">
        <button id="btn">点击按钮</button>
        <a id="aid" href="http://www.baidu.com">百度一下</a>
    </div>
    <script>
        document.getElementById("btn").addEventListener("click",showType);
        document.getElementById("div").addEventListener("click",showDiv);
        document.getElementById("aid").addEventListener("click",showA);
        function showType(){
            alert(event.type);//顾名思义
            alert(event.target);//顾名思义
            event.stopPropagation();//阻止事件冒泡,否则还会触发点击div的事件
        }
        function showDiv(){
            alert("div");
        }
        function showA(){
            event.stopPropagation();
            event.preventDefault();//阻止事件的默认行为
        }
    
    
    </script>
    </body>
    </html>
  • 相关阅读:
    搭建Elasticsearch 5.4分布式集群
    Elasticsearch中Head插件的使用
    Elasticsearch6.0及其head插件安装
    elasticsearch 6.2.3安装ik分词
    linux安装elasticsearch
    [Elasticsearch] 多字段搜索 (三)
    [Elasticsearch] 全文搜索 (一)
    [Elasticsearch] 多字段搜索 (二)
    elasticsearch this is not a http port
    基于visual Studio2013解决C语言竞赛题之0704字符串长度
  • 原文地址:https://www.cnblogs.com/foreverlin/p/10077126.html
Copyright © 2011-2022 走看看