js事件-笔记

2023-05-16

这里写目录标题

  • js事件
      • 常见事件
      • 事件的注册方式
      • 事件处理分级
        • 1.DOM0级事件处理程序:
        • 2. DOM2级事件处理程序:
        • 3. DOM3级事件
      • 事件流三个阶段

js事件


常见事件

  • onload 加载完成事件 页面加载之后,常用于页面js代码初始化动作
  • onclick 单击事件 常用于按钮的点击响应操作
  • onblur 失去焦点事件 常用于输入框失去焦点后验证其输入内容是否合法
  • onchange 内容发生改变事件 常用于下拉列表和输入框发生改变后操作
  • insubmit 表单提交事件 常用于表单提交前,验证所有表单项目是否合法

事件的注册方式

  1. 静态注册事件

通过html标签的事件属性直接赋予事件响应的代码

  • 最多只能绑定一个事件
  • 一眼就能看出什么元素绑定了事件。
  • html和js文件的耦合度过高,不利于维护,修改脚本的时候还得修改html文件。标签绑定不符合行为和事件分离原则,js文件和html文件应该尽量松散耦合。
  • 可能有时间差。如果js代码在html标签之后,用户激活事件时,事件如果还没有被解析,则会引起报错。(一般用try,catch解决,这样错误便不会付出水面。)。

2.动态注册事件

先通过js代码得到标签的dom对象,然后通过 dom 对象.事件名 = function(){} 或者 document.addEventListener(“事件名称”, 函数, false)
这种形式赋予事件响应后的代码。

缺点:


    <script language="JavaScript">
      function f() {
            alert("static");
            //dynamic 
            document.getElementById("e").onclick = function (ev) {

                alert("dynamic")
            };
        }
    </script>



<button onclick="f()">static bind</button>
<button id="e">dynamic bind</button>

事件处理分级

js中事件绑定的几种方式
JS事件级别

1.DOM0级事件处理程序:

将一个函数赋值给一个事件处理程序属性,表示元素的方法,这时的事件处理程序是在元素的作用域中运行。这种做法的优点是:简单和所有浏览器都支持。
例如:

//1
var o= document.getElementById("ud");
o.onclick = function() {}
//2
<button type="button" onclick="show()"></button>

缺点是:只能给该元素绑定一个事件。于是出现DOM2级事件处理程序。

2. DOM2级事件处理程序:

addEventListener()添加事件,removeEventListener()删除事件。可添加多个,执行顺序与添加顺序相同。两个方法都接受三个参数:

第一个参数:事件名称

第一个参数:作为事件处理程序的函数(没有on前缀)

第一个参数:表示是否在捕获阶段执行事件处理函数

例如:


    <script language="JavaScript">


        function f() {
            alert("static");
            //dynamic
            document.getElementById("e").onclick = function (ev) {

                alert("dynamic")
            };
        }

        function f2() {

           document.getElementById("e").addEventListener("click",bl,false);
           document.getElementById("e").addEventListener("click",bl2, false);

        }

        function bl() {
            alert("blur1");
        }
        function bl2() {
            alert("bl2");
        }
    </script>
    <button onclick="f()">static bind</button>
	<button id="e">dynamic bind</button>
	<button id="d"  style="" onclick="f2()">Ak</button>

以下暂时参考原文:

  1. js中事件绑定的几种方式
  2. JS事件级别

关于第三个参数一般填写默认值false或不填,因为:大多数情况下,都是将事件处理程序添加到时间流的冒泡阶段,这样可以最大限度地兼容各种浏览器,如果不是特别需要,不建议在事件捕获阶段注册事件处理程序。关于捕获和冒泡同时存在的情况下我总结了以下几点:

(1)冒泡且捕获:捕获导致不能进入更低层事件,点击该层的更低层只能触发该捕获层,一般为了不阻断其他事件的触发设置捕获为false。

(2)冒泡但不捕获:执行冒泡顺序,从触发层从内到外执行事件,与事件监听绑定的顺序无关。

(3)若多级包含元素且多个元素都添加事件监听则为了更稳定的执行时间需要:①每个元素的事件监听的捕获都设置为false或不填。②并且在执行函数内阻止冒泡。e.stopPropagation()||e.cancelBubble=true;

3. DOM3级事件

DOM3 级事件在 DOM2 级事件的基础上添加了更多的事件类型,全部类型如下:

UI事件,当用户与页面上的元素交互时触发,如:load、scroll
焦点事件,当元素获得或失去焦点时触发,如:blur、focus
鼠标事件,当用户通过鼠标在页面执行操作时触发如:click、dbclick、mouseup
滚轮事件,当使用鼠标滚轮或类似设备时触发,如:mousewheel
文本事件,当在文档中输入文本时触发,如:textInput
键盘事件,当用户通过键盘在页面上执行操作时触发,如:keydown、keyup、keypress
合成事件,当为IME(输入法编辑器)输入字符时触发,如:compositionstart
变动事件,当底层DOM结构发生变化时触发,如:DOMsubtreeModified

同时DOM3级事件也允许使用者自定义一些事件。

事件流三个阶段

参考


更新中…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js事件-笔记 的相关文章

  • Android Studio模拟器如何把语言设置为中文和设置中文输入法

    文章目录 Android Studio模拟器语言设置为中文Android Studio模拟器设置中文输入法Android Studio模拟器安装搜狗输入法下载搜狗输入法x86的输入法APK安装APK配置搜狗输入法 Android Studi
  • Top44:VNC服务器端安装及配置多用户启动-CentOS7.5 配置VNC服务-Linux服务器端配置可视化桌面连接

    CentOS7 5 配置VNC服务 思路流程1 列出可用环境组2 选择安装Xfce桌面3 创建一个用户 xff08 root用户不让连 xff0c 需开启配置 xff09 4 安装VNC Server5 创建初始配置并设置密码6 停止vnc
  • Mac 使用svn 报错:zsh:mac zsh: command not found: svn完整解决方案

    Mac 使用svn 报错 xff1a zsh xff1a mac zsh command not found svn完整解决方案 之前都是用的git xff0c 普遍也都是使用的git xff0c 但是为了应对各种项目 xff0c svn也
  • FreeRTOS数据类型和编程规范

    目录 数据类型 变量名 函数名 宏的名 数据类型 每个移植的版本都含有自己的portmacro h头文件 xff0c 里面定义了2个数据类型 TickType t FreeRTOS配置了一个周期性的时钟中断 xff1a Tick Inter
  • 软件工程考研复试速成 - 知识点精炼 - 背诵版

    针对于考研复试 软件工程 的面试问答 xff0c 一般都是抽查重点的概念问题 xff0c 所以本文对软件工程知识点进行重点的精炼 xff0c 力求节省准研究生们的复习时间 写这篇博客也是因为小编也在准备复试 xff0c 对学习的网课进行笔记
  • 如何将模型alembic与动画alembic相关联?

    在三维动画制作时 xff0c 许多制作部门需要同时进行 xff0c 当模型部门制作好模型之后会把publish好的模型分给材质 xff0c 动画 xff0c layout等部门同时进行制作 xff0c 有时候项目要求角色有不同的材质和UV
  • Cesium标注实体【Entity】增、删、改、查

    实体实例将多种形式的可视化聚合到一个高级对象中 它们可以手动创建并添加到 Viewer entities 或由数据源生成 xff0c 例如 CzmlDataSource 和 GeoJsonDataSource 一 Entity 增加 方法一
  • hdu1085(生成函数)

    题目 我终于会用对拍器了 xff0c 我总是不敢去尝试新事物 xff0c 去年就像学 xff0c 上网搜过几次资料 xff0c 感觉烦就放弃了 xff0c 但事实证明其实非常简单 xff0c 对于我未来的coding生活来说实在是大有裨益
  • sumo osmWebWizard.py不生成OSM.sumocfg

    osmWebWizard在确定地图范围和车辆数 xff0c 点击Generate Scenario选项后 生成文件只含有osm netccfg和osm polycfg xff0c 如图 xff1a 主要原因是 当前版本默认仅勾选Add Po
  • vue封装Axios

    Axios的封装 安装axios npm install axios span class token punctuation span span class token comment 安装axios span 引入 一般在项目的src目
  • docker学习笔记(一)—— ubuntu16.04下安装docker

    本文开发环境为Ubuntu 16 04 LTS 64位系统 xff0c 通过apt的docker官方源安装最新的Docker CE Community Edition xff0c 即Docker社区版 xff0c 是开发人员和小型团队的理想
  • Centos7 安装teamviewer

    需求 需要在centos7服务器上安装最新的centos7 一 前期准备 下载teamviewer安装包 xff1a teamviewer官网 使用xftp把下载的文件传到服务器对应的文件夹中 二 安装步骤 启动前准备环境 1 关闭防火墙
  • 字典序最大的子序列(维护单调栈)

    题意 xff1a 找到给出序列的字典序最大的子序列 思路 xff1a 维护单调栈即可 代码 xff1a span class token macro property span class token directive keyword i
  • C++(7-8章)笔记

    第七章 函数 C 43 43 的编程模块 7 xff0e 1函数 1 xff0c 函数如何返回值的 xff1f 答 xff1a 函数通过将返回值复制到指定的cpu寄存器或内存单元中来将其返回 随后 xff0c 调用程序将查看该内存单元 返回
  • 2020/2/20

    区域赛复现 xff1a 1小时 C 43 43 两章 xff1a 3小时 https www cnblogs com yrz001030 p 12340003 html 补了区域赛一题 xff1a 1小时 几何基础 43 2题 xff1a
  • 图论总结

    https www cnblogs com nervendnig p 9151437 html https www cnblogs com zhsl p 3271754 html
  • 使用栈实现进制转换

    使用栈实现进制转换 题目描述 使用栈将一个很长 xff08 gt 30 xff09 的十进制数转换为二进制数 分析 xff1a 此处虽然讲了用栈操作 xff0c 但是很明显我们可以不用 xff0c 直接用数组保存 当然用栈也一样 通过分析
  • 奇怪的棋盘

    题目描述 CC喜欢下棋 xff0c 她有一天去商店发现有很多很奇怪的棋盘 xff0c 那些棋盘的长宽不一样 xff0c 宽永远是2 xff0c 然后长有从1 n等等 然后那个商店还卖很奇怪的棋子 xff0c 都是1 2的大小 xff0c C
  • 萝卜的冒泡排序

    题目描述 萝卜上次已经说过要给各位同学出一道冒泡排序 xff0c 那么此题就以冒泡排序为主吧 xff0c 可是实验室的学长学姐觉得学弟学妹们都很厉害 xff0c 所以就加了各种各样的条件 xff0c 最 终萝卜还是选择加一些条件 xff0c
  • 直接插入排序

    直接插入排序 题目描述 利用直接插入排序算法实现线性表的排序 要求输出第k趟排序的结果 例如原来线性表为 xff1a 26 12 25 4 36 15 21 第一趟直接排序排序结果为 xff1a 12 26 25 4 36 15 21 xf

随机推荐

  • 习武之人

    题目描述 Edmondsiu用沙袋练习武术 Edmondsiu希望把沙袋摆在他家豪宅里面 Edmondsiu的豪宅有一个由11的地砖铺成的1n的院子里 Edmondsiu是处女座的 xff0c 所以他要把一个沙袋正好摆在一个地砖上 xff0
  • centos6下安装与配置squid代理

    1 安装squid yum span class hljs keyword install span squid y 2 编辑配置文件 vim etc squid squid conf span class hljs preprocesso
  • 我卢本伟没有开挂!

    题目描述 众所周知 xff0c 卢本伟没有开挂 xff0c 如何验证他没有开挂呢 xff1f 这里我们发现一个算法通过输出d能够证明他有没有开挂 1 xff1a 如果 n 61 0 xff0c 结束算法 2 xff1a find the s
  • 邻接矩阵

    题目描叙 xff1a 无向图的表示方法邻接矩阵 xff0c 需打印到屏幕 有权 分析 xff1a 邻接矩阵的核心思想便是顶点表和边表 我们可以定义一个结构体 xff0c 里面包含一个顶点表 xff08 即一个vexs一维数组 xff09 x
  • 7-15 完全二叉搜索树 (30 分)

    题目描述 xff1a 一个无重复的非负整数序列 xff0c 必定对应唯一的一棵形状为完全二叉树的二叉搜索树 本题就要求你输出这棵树的层序遍历序列 输入格式 xff1a 首先第一行给出一个正整数 N xff08 1000 xff09 xff0
  • 7-14 最短工期 (25 分)

    题目描述 xff1a 一个项目由若干个任务组成 xff0c 任务之间有先后依赖顺序 项目经理需要设置一系列里程碑 xff0c 在每个里程碑节点处检查任务的完成情况 xff0c 并启动后续的任务 现给定一个项目中各个任务之间的关系 xff0c
  • 176. 装满的油箱(bfs)

    题目链接 xff1a https www acwing com problem content description 178 有N个城市 xff08 编号0 1 N 1 xff09 和M条道路 xff0c 构成一张无向图 在每个城市里边都
  • ArrayList中remove(int index)方法中为什么不使用fastRemove方法?

    今天在看 ArrayList 源码时 xff0c 我发现了一个疑问 ArrayList 有两个删除的方法分别是 remove int index 和 remove Object o 方法 span class token keyword p
  • #Linux杂记--Docker pull下载镜像时无法使用proxychains4的解决方案

    Linux杂记 Docker pull下载镜像时无法使用proxychains4的解决方案 1 引言2 解决方案 1 引言 大部分命令都可以使用 proxychains4 访问国外资源 xff0c 但 docker 下载镜像的时候不行 于是
  • Python中将numpy Int16类型的音频阵列转换为Float32类型

    目前语音处理中 xff0c 我们存储较多的音频格式为numpy Int16类型的 xff0c 但在对音频文件进一步做处理时 xff0c 有时候会需要转换为float32类型的数据使用 这里转换方式如下 xff1a xff08 1 xff09
  • Java调用python代码的五种方式

    你还在纠结怎么样在Java中调用python吗 xff1f 我们在实际工程项目问题中 xff0c 经常会碰到不同语言代码之间互调的问题 xff0c 比如此处的Java调用python xff08 常见Java调用python写的处理模型来完
  • Android从零开始——之Android简介以及开发环境的搭建

    镇楼图 android xff08 Google公司开发的操作系统 xff09 以下省略一万字 请自行百度 34 android 34 或通过链接 xff1a http baike baidu com subview 1241829 932
  • 指针数组和数组指针的区别及其详解

    引言 对于指针数组和数组指针的概念 xff0c 相信很多人经常会感到迷惑 xff0c 见到二者一时不能分辨究竟对应哪一个才是对的 接下来我们来分析一下二者区别 我们来看一下这个示例代码 xff1a span class token keyw
  • 解决pip安装报错 “error: microsoft visual c++ 14.0 or greater is required”

    今天在Windows的anaconda中使用pip安装工具包的时候出现报错信息 xff0c 如下图所示 xff1a 经排查发现主要错误是由 error microsoft visual c 43 43 14 0 or greater is
  • Linux离线状态下的Anaconda安装与Python环境创建

    1 下载与安装说明 下载 下载地址 xff1a https repo anaconda com archive 版本 xff1a 此处以版本为2020 11的anaconda作示例 xff0c 其携带的python版本为3 8 5 下载 x
  • Linux离线状态下在anaconda中安装pytorch

    1 下载与安装说明 下载地址 xff08 按安装方法选取 xff09 bz2压缩包下载地址 xff1a https mirrors tuna tsinghua edu cn anaconda cloud pytorch win 64 C 6
  • Linux离线状态下安装cuda、cudnn、cudatoolkit

    目录 1 下载与安装说明2 CUDA安装3 cuDNN安装4 cudatoolkit安装5 测试安装成功 1 下载与安装说明 工具包下载地址 CUDA历史版本下载地址 xff1a https developer nvidia com cud
  • 利用BP神经网络进行函数拟合

    利用BP神经网络进行函数拟合 摘要关键词问题描述算法设计结果分析与讨论结论Python源代码 摘要 数据拟合是在假设模型结构已知的条件下最优确定模型中未知参数使预测值与数据吻合度最高 xff0c 本文选取线性项加激活函数组成一个非线性模型
  • curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused的几种解决方式

    curl 7 Failed to connect to raw githubusercontent com port 443 Connection refused的几种解决方式 xff1f 前言 xff1a 最近随着flutter的发布 x
  • js事件-笔记

    这里写目录标题 js事件常见事件事件的注册方式事件处理分级1 DOM0级事件处理程序 xff1a 2 DOM2级事件处理程序 xff1a 3 DOM3级事件 事件流三个阶段 js事件 常见事件 onload 加载完成事件 页面加载之后 xf