JavaScript以事件驱动来实现页面的交互,其核心是以消息为基础,以事件来驱动。虽然利用传统的JavaScript事件处理方式也能够完成页面交互,但jQuery框架增加并扩展了基本的事件处理机制,jQuery框架提供了更加优雅的事件处理语法,并极大的增强了事件处理能力。

一、事件处理简单说明

jQuery框架在JavaScript的基础上进一步封装了不同类型的事件模型,形成了一套更强大和优雅的“jQuery事件模型”。

jQuery中的事件模型表现出以下特征:

① 使用DOM事件模型中标准的事件类型名称。
② 统一了事件处理中的各种方法。
③ 允许为每个元素的每个事件类型建立多个处理程序。
④ 统一了事件对象的传递方法并规范了事件对象的常用属性和方法。
⑤ 为事件管理和操作提供了统一的方法。

二、绑定事件

在jQuery中,我们可以有多种方式来为标签绑定事件,可以简单的区分为专用方法绑定事件和快捷方法绑定事件。

① 快捷方法绑定事件

jQuery框架中定义了24个快捷方法来为标签绑定特定类型的事件,这些方法和二级事件模型中的事件类型对应,名称相同。

具体的快捷方法如下:

	blur()      当元素失去焦点时发生 blur 事件
change() 当元素的值发生改变时,会发生 change 事件
click() 当点击元素时,会发生 click 事件
dbclick() 当双击元素时,会发生 dblclick 事件
error() 当元素遇到错误(没有正确载入)时,发生 error 事件
focus() 当元素获得焦点时,发生 focus 事件
focusin() 当元素获得焦点时,发生 focusin 事件(包括子元素)
focusout() 当元素失去焦点时,发生 focusout事件(包括子元素)
keydown() 当按键被按下时,发生 keydown 事件
keyup() 当按键被松开时,发生 keyup 事件
keypress() 当按键被按下时,发生 keypress事件(响应每个字符)
mouseenter()当鼠标指针穿过元素时,会发生 mouseenter 事件
mouseleave()当鼠标指针离开元素时,会发生 mouseleave 事件
mouseover() 当鼠标指针位于元素上方时,会发生 mouseover 事件
mouseout() 当鼠标指针从元素上移开时,会发生 mouseout 事件
mousedown() 当鼠标进入元素,并按下按键时,会发生mousedown事件
mouseup() 当在元素上放松鼠标按钮时,会发生 mouseup 事件
mousemove() 当鼠标在指定的元素中移动时,会发生 mousemove 事件
resize() 当调整浏览器窗口的大小时,发生 resize 事件
scroll() 当用户滚动指定的元素时,会发生 scroll 事件
select() 当文本被选择时,会发生 select 事件
submit() 当提交表单时,会发生 submit 事件(表单)
load() 当指定的元素(及子元素)已加载时,会发生load事件
unload() 当用户离开页面时,会发生 unload 事件(1.8-)

② 专用方法绑定事件

jQuery中可以使用四种专用方法来绑定事件,分别是bind方法、live方法、delegate方法和on方法,每个版本各有区别,建议使用on方法。

补充说明

	bind方法适用于所有的版本,1.7+ 推荐使用on方法来代替。
live方法适用于 1.9- 的版本,1.9+ 版本使用on方法来代替。
delegate方法适用于1.4.2 + 的版本。
on方法适用于1.7+ 的版本,1.7+ 用于替代bind和live方法。

on方法为指定的元素添加一个或者是多个事件,并规定这些事件发生时指定的函数。

on方法的语法:on(eventType,childselector,data,function)

参数说明:

eventType:必传参数,指定事件的类型如click等。
childselector:可选参数,用于事件委托。
data:可选参数,设计需要传递的数据。
function:必传参数,事件发生时,执行的函数。

示例代码

		//【1】使用快捷方法来给按钮添加点击事件
$("button").click(function () {
console.log("点击了按钮---1");
});
$("button").click(function () {
console.log("点击了按钮---2");
}); //【2】使用on方法来给按妞添加点击事件
$("button").on("click",{name:"wendingding"},function (event)
{
console.log("点击了按钮----on");
console.log(event.data.name);
})

扩展:one方法的使用

one方法是on方法中的一种特殊使用方式,由one方法绑定的事件在执行一次响应之后就会失效。其设计思路是:在事件处理函数的内部注销当前事件

扩展:事件委托说明

事件委托是开发中常见的绑定事件方式,参考代码如下。

	//思考:如何能够找到所有的span标签(已经存在的 + 尚未创建的)
//第一个参数:事件的类型
//第二个参数:给谁添加事件
//第三个参数:事件发生的回调函数
$("div").on("click","span",function () {
console.log("点击了标签");
})

三、注销事件

有时候我们需要把一些元素的绑定事件注销,可以使用off方法来注销事件。

注销事件的方法和注册事件的方法是相反的操作,参数和用法基本相同。

off方法的使用示例

	   //注销button标签上面的所有点击事件
$("button").off("click");
//注销button标签上面指定的鼠标移入事件,fn为绑定移入事件时的函数
$("button").off("mouseenter",fn);

四、事件对象

在注册事件的时候,event对象实例将作为第一个参数传递给事件的回调函数,这和DOM事件模型是完全相同的。另外,jQuery统一了IE事件模型和DOM事件模型中event对象属性和方法的用法,使其符合DOM标准事件模型的规范。

在事件处理函数(回调函数)中,我们可以获取事件对象的相关信息。


$("button").on("click",{name:"zs"},function (event) {
console.log("点击了按钮----2");
//获取事件的类型
console.log(event.type);
//获取目标对象
console.log(event.target);
//获取被省略的对象
console.log(event.data);
})

五、事件冒泡

事件冒泡的简单解释:如果某个标签的事件被触发,那么该标签父标签上被注册的相同类型事件也会被触发,并且会依次一直冒泡到顶端。

	<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-3.2.1.js"></script>
<style>
.box1{
width: 300px;
height: 300px;
background: red;
}
.box2{
width: 200px;
height: 200px;
background: green;
}
.box3{
width: 100px;
height: 100px;
background: yellow;
}
</style>
</head>
<body>
<script>
$(function () {
$(".box1").click(function () {
console.log("点击了box1");
})
$(".box2").click(function (e) {
console.log("点击了box2");
//e.stopPropagation(); //return false;
});
$(".box3").click(function () {
console.log("点击了box3");
})
})
</script>
<div class="box1">
<div class="box2">
<div class="box3"></div>
</div>
</div>
</body>
</html>

阻止事件冒泡的两种方式:

【1】在回调函数中返回false。

【2】调用事件对象的stopPropagation方法。

六、触发事件和默认行为

默认行为

默认行为:页面中的一些标签常常存在默认的行为,比如表单的submit事件类型,如果该类型的事件被触发,则会导致表单的提交;比如a标签存在跳转网页连接的默认行为等。如果需要在事件被触发的时候,阻止标签默认的行为,可以考虑在处理函数内部调用事件对象的preventDefault()方法。

触发事件

触发事件:页面中标签的事件都是在特定条件下发生的,所以不同类型的事件触发时间其实无法预测。但有的时候,我们可能需要控制事件发生的时机。这时候,可以考虑使用trigger()或者是triggerHandler()方法来触发事件。

语法说明

trigger(type),[data]

triggerHandler(type),[data]

参数说明

type参数表示事件的类型,以字符串的形式传递。

data参数是可选的,利用该参数可以向事件的回调函数传递额外的数据。

代码示例:


$(".box3").trigger("click");
$("input").triggerHandler("click");

trigger和triggerHandler方法的对比

① triggerHandler方法不会触发标签的默认事件。
② triggerHandler方法只会触发jQ实例对象集合中第一个元素的事件回调。
③ triggerHandler方法返回的是事件回调函数的返回值,而非jQ对象。

前端开发系列070-JQuery篇之框架事件处理的更多相关文章

  1. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

  2. openlayers5-webpack 入门开发系列一初探篇(附源码下载)

    前言 openlayers5-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载 ...

  3. leaflet-webpack 入门开发系列一初探篇(附源码下载)

    前言 leaflet-webpack 入门开发系列环境知识点了解: node 安装包下载webpack 打包管理工具需要依赖 node 环境,所以 node 安装包必须安装,上面链接是官网下载地址 w ...

  4. web前端开发学习:jQuery的原型中的init

    web前端开发学习:jQuery的原型中的init 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 jQuery.fn ...

  5. 【Windows10 IoT开发系列】配置篇

    原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry ...

  6. 前端开发 vue,angular,react框架对比1

    转载自:https://www.cnblogs.com/hubgit/p/6633214.html 首先,我们先了解什么是MVX框架模式? MVX框架模式:MVC+MVP+MVVM 1.MVC:Mod ...

  7. [置顶]【实用 .NET Core开发系列】- 导航篇

    前言 此系列从出发点来看,是 上个系列的续篇, 上个系列因为后面工作的原因,后面几篇没有写完,后来.NET Core出来之后,注意力就转移到了.NET Core上,所以再也就没有继续下去,此是原因之一 ...

  8. Android Metro风格的Launcher开发系列第三篇

    前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...

  9. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程

    在前面随笔介绍的<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>里面,介绍了如何改进和完善审计日志和登录日志的应用服务端和Winform客户端,由于篇幅限制,没有进 ...

  10. ABP开发框架前后端开发系列---(16)ABP框架升级最新版本的经验总结

    有一小段时间没有持续升级ABP框架了,最近就因应客户的需要,把ABP框架进行全面的更新,由于我们应用的ABP框架,基础部分还是会使用官方的内容,因此升级的时候需要把官方基础ABP的DLL进行全面的更新 ...

随机推荐

  1. SparkSql 写 Es

    官方文档 key 备注 es.write.operation index(默认)添加新数据,旧数据被替换,重新索引;create添加新数据,数据存在抛出异常;update 更新现有数据,不存在抛出异常 ...

  2. 元素垂直居中、viewport、meta、文本溢出显示省略号...

    | 原文:面试的信心来源于过硬的基础 https://segmentfault.com/a/1190000013331105?utm_source=channel-newest 1. viewport ...

  3. MCP协议Streamable HTTP

    一.概述 2025 年 3 月 26 日,模型上下文协议(Model Context Protocol,简称 MCP)引入了一项关键更新:用 Streamable HTTP 替代原先的 HTTP +  ...

  4. 遇到的问题之“web container destroy and kill the job.-Web容器销毁和终止作业”

    一.问题 JobThread toStop, stopReason:web container destroy and kill the job. 2023-11-22 18:10:10 [com.x ...

  5. 实战案例分享:如何基于Apache SeaTunnel全方位进行高效二次开发

    大家好,我是范佳,是Apache SeaTunnel社区的PMC member,同时也是白鲸开源高级开发工程师.今天给大家分享一些基于Apache SeaTunnel二次开发的内容. 这部分内容主要涉 ...

  6. 必看!手把手教你玩转Dify的3大核心工具!

    Dify 中的工具是指其平台内置或支持集成的功能插件,用于扩展 AI 应用的能力. 1.工具作用 扩展 LLM 的能力:工具可以赋予 LLM 连接外部世界的能力,例如联网搜索.科学计算.绘制图片等.例 ...

  7. Httprunner 文件上传场景

    使用Httprunner在做接口自动化的时候,经常会遇到需要上传文件的场景,下面讲一下关于Httpruner文件上传的用例编写. 1. 建项目 首先我们使用httprunner的脚手架快速搭建一个工程 ...

  8. 提示词工程:引导AI高效完成任务的艺术

    提示词工程(Prompt Engineering)是人工智能时代的一项关键技能,它研究如何设计最佳提示词,以引导大型语言模型产生我们所需的结果.本文将深入探讨提示词工程的核心概念.组成部分及其与微调的 ...

  9. 代码随想录第八天 | 字符串part02

    还账还账,工作日欠下的账得今天补上,出来混,迟早要还的 151.翻转字符串里的单词 建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练. 题目链 ...

  10. 伪共享FalseShare

    伪共享FalseShare 什么是共享 下图是计算的基本结构.L1.L2.L3分别表示一级缓存.二级缓存.三级缓存,越靠近CPU的缓存,速度越快,容量也越小.所以L1缓存很小但很快,并且紧靠着在使用它 ...