JavaScript高级程序设计 事件学习笔记

《JavaScript高级程序设计》事件学习笔记

什么是事件?

事件是指在网页中发生的交互的行为,比如页面的加载、点击按钮、鼠标滚动等,这些行为就是事件。

事件监听器

事件监听器是用来监听特定事件并处理事件的函数。可以通过给元素添加事件监听器来创建响应用户操作的交互式网页。

在 JavaScript 中,我们可以使用 addEventListener() 方法来添加事件监听器。该方法包含三个参数:事件名、处理函数和一个布尔值,表示句柄在捕获阶段还是冒泡阶段触发。例如:

// 获取按钮元素
const btn = document.getElementById('myButton');

// 添加一个点击事件监听器
btn.addEventListener('click', function() {
    alert('Button clicked!');
});

在上面的示例中,我们首先获取 id 为 myButton 的元素,然后添加一个点击事件监听器。

事件冒泡和事件捕获

事件冒泡指的是事件从内向外传递的过程,即从被点击的元素开始,由内向外逐层传递到 document 对象。事件冒泡是默认的事件传播方式。

事件捕获是指事件从外向内传递的过程,即从 document 对象开始,由外向内逐层传递到被点击的元素。事件捕获需要用到 addEventListener() 方法的第三个参数,这个参数为 true 时表示在捕获阶段触发。例如:

// 获取按钮元素
const btn = document.getElementById('myButton');

// 添加一个点击事件监听器,使用事件捕获
btn.addEventListener('click', function() {
  alert('Button clicked!');
}, true);

在上面的示例中,我们给按钮元素添加了一个点击事件监听器,并指明了使用事件捕获。

事件对象

事件对象是在触发事件时自动创建的对象,它包含与事件相关的信息。在事件处理函数中,可以通过参数访问事件对象。例如:

// 获取按钮元素
const btn = document.getElementById('myButton');

// 添加一个点击事件监听器
btn.addEventListener('click', function(event) {
  console.log(event.target); // 输出触发事件的目标元素
});

在上面的示例中,我们在事件处理函数中访问了事件对象,并通过 target 属性输出了触发事件的目标元素。

常见事件

以下是常见的事件列表:

  • click:鼠标单击事件。
  • dblclick:鼠标双击事件。
  • mouseover:鼠标移动到元素上方事件。
  • mouseout:鼠标移出元素事件。
  • keydown:键盘按下事件。
  • keyup:键盘松开事件。
  • change:表单内容改变事件。
  • submit:表单提交事件。
  • load:文档(包括图片、音频等)加载事件。
  • unload:文档卸载事件。

示例:按钮动态改变样式

<!DOCTYPE html>
<html>
  <head>
    <title>Button Style Change Demo</title>
    <style>
      /* CSS 样式 */
      .button {
        font-size: 16px;
        padding: 12px;
        background-color: blue;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
      }
      .button:hover {
        background-color: red;
      }
    </style>
  </head>
  <body>
    <button id="myButton" class="button">Click Me</button>
    <script>
      // JavaScript 代码
      const btn = document.getElementById('myButton');
      btn.addEventListener('mouseover', function() {
        this.style.backgroundColor = "green";
      });
      btn.addEventListener('mouseout', function() {
        this.style.backgroundColor = "blue";
      });
    </script>
  </body>
</html>

在上面的示例中,我们创建了一个按钮,通过 CSS 定义了其样式。然后通过 JavaScript 给按钮添加了鼠标移入和鼠标移出事件监听器,当鼠标移入时,按钮背景颜色变为绿色,当鼠标移出时,按钮背景颜色恢复为蓝色。

示例:表单验证

<!DOCTYPE html>
<html>
  <head>
    <title>Form Validation Demo</title>
    <!-- 样式表 -->
    <style>
      label, input {
        display: block;
        margin-bottom: 10px;
      }
      span {
        color: red;
      }
    </style>
  </head>
  <body>
    <form id="myForm">
      <label for="username">Username:</label>
      <input type="text" id="username">

      <label for="password">Password:</label>
      <input type="password" id="password">

      <label for="repassword">Re-enter Password:</label>
      <input type="password" id="repassword">

      <button type="button" id="submitBtn">Submit</button>
    </form>
    <!-- JavaScript 代码 -->
    <script>
      // 获取表单元素
      const form = document.getElementById('myForm');
      const username = document.getElementById('username');
      const password = document.getElementById('password');
      const repassword = document.getElementById('repassword');
      const submitBtn = document.getElementById('submitBtn');

      // 添加表单提交事件监听器
      form.addEventListener('submit', function(event) {
        // 阻止表单提交
        event.preventDefault();

        // 验证用户名是否为空
        if (username.value === '') {
          username.nextElementSibling.innerText = 'Username cannot be empty';
          return;
        }

        // 验证密码是否为空
        if (password.value === '') {
          password.nextElementSibling.innerText = 'Password cannot be empty';
          return;
        }

        // 验证两次密码是否相同
        if (password.value !== repassword.value) {
          repassword.nextElementSibling.innerText = 'Passwords do not match';
          return;
        }

        // 表单验证通过,提交表单
        form.submit();
      });

      // 添加验证事件监听器
      username.addEventListener('blur', function() {
        if (this.value === '') {
          this.nextElementSibling.innerText = 'Username cannot be empty';
        } else {
          this.nextElementSibling.innerText = '';
        }
      });

      password.addEventListener('blur', function() {
        if (this.value === '') {
          this.nextElementSibling.innerText = 'Password cannot be empty';
        } else {
          this.nextElementSibling.innerText = '';
        }
      });

      repassword.addEventListener('blur', function() {
        if (this.value !== password.value) {
          this.nextElementSibling.innerText = 'Passwords do not match';
        } else {
          this.nextElementSibling.innerText = '';
        }
      });
    </script>
  </body>
</html>

在上面的示例中,我们创建了一个表单,通过 JavaScript 给表单添加了提交事件监听器,以及给每个表单元素添加了失焦事件监听器,用于表单验证。当用户点击提交按钮时,表单会被验证,如果验证通过,则提交表单。如果验证不通过,则给用户相应的错误提示信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript高级程序设计 事件学习笔记 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 详解JS中的compose函数和pipe函数用法

    详解JS中的compose函数和pipe函数用法 简介 函数式编程是一种编程范式,它的特点是把函数当作基本的构建块和抽象单元,强调函数调用以表达程序的控制流和对数据的处理。在函数式编程中,函数可以像数据一样被传递和操作,灵活性很高。在JavaScript领域,函数式编程受到了越来越多的重视,并且实现了一个各种常见函数式编程工具函数库——Lodash.js。 …

    JavaScript 2023年5月27日
    00
  • 一个简易的js图片轮播效果

    下面是一个关于实现“一个简易的js图片轮播效果”的完整攻略: 确定需求 首先,我们需要明确实现一个简易的js图片轮播效果的需求。具体来说,它应该具有以下特点: 需要能够自动播放图片; 需要能够通过点击左右箭头手动切换图片,点击小圆点可以快速切换到相应的图片; 图片过渡效果需要流畅自然。 准备html结构 实现一个图片轮播的首要任务就是准备好html结构。我们…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript函数对象

    详解JavaScript函数对象 JavaScript中的函数是一种强大的工具,不仅可以完成简单的操作,还可以封装复杂的逻辑和数据。定义一个函数的时候,实际上是定义了一个函数对象。本文将详细讲解JavaScript函数对象,包括属性、方法、调用方式等方面。 函数对象的属性 在JavaScript中,函数是一种特殊的对象。作为一个对象,函数有自己的属性和方法。…

    JavaScript 2023年5月27日
    00
  • JavaScript高级程序设计 学习笔记 js高级技巧

    JavaScript高级程序设计 学习笔记 js高级技巧 概述 《JavaScript高级程序设计》是一本深入讲解JavaScript核心概念和高级技巧的经典著作。对于想要深入学习JavaScript的开发者来说,这本书是非常好的选择。本文将会分享我对该书学习过程的笔记和总结。 学习笔记 第一部分 基础知识 第一部分主要介绍了一些JavaScript的基础知…

    JavaScript 2023年5月18日
    00
  • js正则表达式讲解之index属性(RegExp对象)

    JS正则表达式讲解之index属性(RegExp对象) 什么是正则表达式的index属性? 在JavaScript中,正则表达式是RegExp对象的实例。RegExp对象有一个名为index的属性,用于表示正则表达式匹配的最后一个字符的位置。 例如,对于字符串”hello world”,正则表达式/world/匹配的最后一个字符是d,其在字符串中的位置是8(…

    JavaScript 2023年6月10日
    00
  • 正则表达式搭配js轻松处理json文本方便而老古

    正则表达式搭配JS轻松处理JSON文本方便而老古 什么是正则表达式? 正则表达式是一种用于描述字符串模式的语法,通过使用简洁而强大的语法规则,可以在文本匹配、搜索、替换、验证等方面提供非常高效和灵活的处理方式。 如何在JavaScript中使用正则表达式处理JSON文本? JSON(JavaScript Object Notation)是一种轻量级的数据交换…

    JavaScript 2023年5月27日
    00
  • JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)

    下面是详细讲解: 1. JQuery form表单提交前验证单选框是否选中 步骤1:给表单元素设置id属性 在HTML表单中添加id属性,例如: <form id="myForm"> <!– 表单元素 –> </form> 步骤2:编写JQuery代码 使用JQuery库完成表单验证功能,代码如下:…

    JavaScript 2023年6月10日
    00
  • Javascript 原型与原型链深入详解

    Javascript 原型与原型链深入详解 原型 在JavaScript中,每一个对象都有一个指向其原型的属性,称之为 __proto__,原型本身也是一个对象。在Javascript中使用函数构造对象时,函数本身也有一个原型属性,称之为 prototype。我们可以使用 Object.getPrototypeOf() 方法实现查找一个对象的原型。比如: l…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部