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获取节点的兄弟,父级,子级元素的方法

    JS获取节点的兄弟、父级、子级元素的方法可以使用DOM提供的方法实现。下面是几种常用的方法: 获取兄弟元素节点 1. nextSibling和previousSibling nextSibling和previousSibling分别是获取下一个兄弟节点和上一个兄弟节点的方法。这两个方法返回的都是一个节点对象。需要注意的是,获取的兄弟节点可能是文本节点或注释节…

    JavaScript 2023年6月10日
    00
  • javascript实用小函数使用介绍

    JavaScript实用小函数使用介绍 什么是JavaScript实用小函数? JavaScript实用小函数,指的是那些不需要大段代码就能完成某些特定操作或实现某些特定功能的函数。这些函数通常都很简单,但能够大大提高我们编写JavaScript代码的效率。 JavaScript实用小函数的使用 JavaScript实用小函数的使用非常简单,一般只需要将其复…

    JavaScript 2023年5月18日
    00
  • 写出更好的JavaScript程序之undefined篇(中)

    针对“写出更好的JavaScript程序之undefined篇(中)”这篇文章,我来进行详细的讲解攻略,包括以下几个方面: 理解undefined的含义 undefined是JavaScript中的一个关键字,指的是一个变量或属性没有被赋值,或者被赋值为undefined。例如以下代码片段中的变量a和b都是undefined: var a; var b = …

    JavaScript 2023年5月27日
    00
  • js 字符串反转(倒序)的几种方式总结

    JS 字符串反转(倒序)的几种方式总结 在 JavaScript 中,我们可以对字符串进行反转,也就是将字符串中字符的顺序倒过来,从而得到反转后的字符串。本文将会总结几种在 JavaScript 中实现字符串反转操作的方法。 方法一:逐个字符拼接字符串 首先,我们可以循环遍历原字符串,并逐个将字符拼接成新的反转后的字符串。具体实现如下: function r…

    JavaScript 2023年5月28日
    00
  • 全面了解JavaScirpt 的垃圾(garbage collection)回收机制

    下面是关于JavaScript垃圾回收机制的详细攻略。 1. 简介 JavaScript是一种解释型语言,在执行代码时,需要将代码转换成机器语言再进行执行。这使得JavaScript非常灵活,但与此同时,也使得程序的开销变得非常昂贵。 为了解决这个问题,JavaScript引入了垃圾回收机制。垃圾回收机制的作用是自动地清除不再使用的内存空间,以解决内存泄漏问…

    JavaScript 2023年6月11日
    00
  • javascript实现考勤日历功能

    实现考勤日历功能的前置要求: 掌握HTML,CSS和JavaScript基础 了解Date对象及其相关方法 了解事件处理机制 下面开始我们的实现攻略: 步骤1:HTML骨架 我们需要先设计一个HTML骨架,用于放置后续动态生成的日历元素。 <div id="calendar"> <div class="head…

    JavaScript 2023年5月27日
    00
  • js点击返回跳转到指定页面实现过程

    实现点击返回跳转到指定页面的过程,一般分为以下几步: 1.获取当前页面的浏览历史记录,即通过window对象的history属性获取。 2.将指定页面的相对路径或绝对路径存储到一个变量中。 3.使用JavaScript编写点击事件处理函数,在该函数中,修改浏览器的历史记录,使其返回到指定页面。通常使用history.pushState()方法实现此功能。该方…

    JavaScript 2023年6月11日
    00
  • 跟我学习javascript的var预解析与函数声明提升

    下面就是“跟我学习JavaScript的var预解析与函数声明提升”的完整攻略。 JavaScript中的预解析 在JavaScript中,预解析是指在执行代码之前,将变量和函数的声明提前,这种行为称为预解析或者预编译。 var的预解析 在JavaScript中,var关键字声明的变量会在预解析阶段被提前声明。但是需要注意的是,只有声明会被提前,赋值不会被提…

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