13、JS事件(事件绑定、事件流、阻止事件冒泡、取消元素默认行为)

简介: 13、JS事件(事件绑定、事件流、阻止事件冒泡、取消元素默认行为)

1、事件绑定(onclickaddEventListener


区别 onclickaddEventListener
onclick 在同一元素的同一事件类型添加多个事件,会被覆盖。不可以设置元素在捕获阶段触发的事件
addEventListener 在同一元素的同一事件类型添加多个事件,不会被覆盖。可以设置元素在捕获阶段(从外到内)触发的事件
  <script>
    // 1、事件绑定(onclick)
    var btn = document.querySelector('button');
    btn.onclick = function () {
      console.log('Hello world!');
    }
    // 2、事件绑定(addEventListener)
    btn.addEventListener("click", function () {
      console.log('Hello world!');
    })
  </script>

2、事件流(addEventListener


当事件被触发时,事件有两个流向,一个是从内到外(事件冒泡),一个是从外到内(事件捕获)


默认情况下,事件会在冒泡阶段运行


addEventListener(evenType.fun,boolean)//默认false:冒泡阶段触发;true:捕获阶段触发

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .big {
      width: 300px;
      height: 300px;
      background-color: black;
    }
    .medium {
      width: 200px;
      height: 200px;
      background-color: bisque;
    }
    .small {
      width: 100px;
      height: 100px;
      background-color: aquamarine;
    }
  </style>
</head>
<body>
  <!-- 1、事件绑定 -->
  <button>button</button>
  <!-- 2、事件流 -->
  <div class="big">
    <div class="medium">
      <div class="small"></div>
    </div>
  </div>
  <script>
    // 1、事件绑定(onclick)
    var btn = document.querySelector('button');
    btn.onclick = function () {
      console.log('Hello world!');
    }
    // 2、事件绑定(addEventListener)
    btn.addEventListener("click", function () {
      console.log('Hello world!');
    })
    // 3、事件流
    var big = document.querySelector('.big');
    var medium = document.querySelector('.medium');
    var small = document.querySelector('.small');
    big.addEventListener('click', function () {
      console.log('big');
    });
    medium.addEventListener('click', function () {
      console.log('medium');
    });
    small.addEventListener('click', function () {
      console.log('small');
    });
    // 输出结果:small、medium、big
  </script>
</body>
</html>


3、阻止事件冒泡stopPropagation

    small.addEventListener('click', function (e) {
      console.log('small');
      e.stopPropagation();
    });
    // 输出结果:small

3、取消元素默认行为(preventDefault


<body>
  <!-- 3、阻止事件默认行为 -->
  <a href='https://www.iconfont.cn'>阿里巴巴矢量库</a>
  <script>
    // 3、阻止事件默认行为
    var a = document.querySelector('a');
    a.onclick = function (e) {
      console.log('Hello world!');
      // 方法一
      e.preventDefault();
      // 方法二
      return false;
    }
  </script>
</body>
</html>
相关文章
|
2天前
|
JavaScript 前端开发 开发者
JavaScript的变量提升是一种编译阶段的行为,它将`var`声明的变量和函数声明移至作用域顶部。
【6月更文挑战第27天】JavaScript的变量提升是一种编译阶段的行为,它将`var`声明的变量和函数声明移至作用域顶部。变量默认值为`undefined`,函数则整体提升。`let`和`const`不在提升范围内,存在暂时性死区。现代实践推荐明确声明位置以减少误解。
11 2
|
3天前
|
JavaScript 前端开发
JavaScript 中的三种事件模型
JavaScript 中的事件模型主要有三种: 传统事件模型(DOM Level 0) 标准事件模型(DOM Level 2) IE 事件模型(非标准,仅限于旧版本的 Internet Explorer)
9 1
|
4天前
|
JavaScript 索引
Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`&lt;li&gt;`元素
【6月更文挑战第25天】Vue.js的`v-for`用于基于数组或对象渲染列表,如遍历数组生成`&lt;li&gt;`元素。基本语法是`v-for=&quot;(item, index) in items&quot;`,支持遍历对象的键值对。注意与`v-if`同用时应使用`&lt;template&gt;`,组件上使用`v-for`需设`key`属性以优化性能。
15 2
|
4天前
|
JavaScript 索引
JS判断数组是否包含某个元素
JS判断数组是否包含某个元素
10 1
|
10天前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
10天前
|
JavaScript
Vue.js中使用.self修饰符来限制事件处理程序的作用域
Vue.js中使用.self修饰符来限制事件处理程序的作用域
|
8天前
|
JavaScript 前端开发
第八篇-Javascript 事件
第八篇-Javascript 事件
15 1
|
10天前
|
JavaScript
Vue.js中使用.self修饰符来处理事件冒泡
Vue.js中使用.self修饰符来处理事件冒泡