jQuery事件_动力节点Java学院整理

发布时间 - 2026-01-11 02:11:25    点击率:

因为JavaScript在浏览器中以单线程模式运行,页面加载后,一旦页面上所有的JavaScript代码被执行完后,就只能依赖触发事件来执行JavaScript代码。

浏览器在接收到用户的鼠标或键盘输入后,会自动在对应的DOM节点上触发相应的事件。如果该节点已经绑定了对应的JavaScript处理函数,该函数就会自动调用。

由于不同的浏览器绑定事件的代码都不太一样,所以用jQuery来写代码,就屏蔽了不同浏览器的差异,我们总是编写相同的代码。

举个例子,假设要在用户点击了超链接时弹出提示框,我们用jQuery这样绑定一个click事件:

/* HTML:
 *
 * <a id="test-link" href="#0" rel="external nofollow" >点我试试</a>
 *
 */

// 获取超链接的jQuery对象:
var a = $('#test-link');
a.on('click', function () {
 alert('Hello!');
});

on方法用来绑定一个事件,我们需要传入事件名称和对应的处理函数。
另一种更简化的写法是直接调用click()方法:

a.click(function () {
 alert('Hello!');
});

两者完全等价。我们通常用后面的写法。

jQuery能够绑定的事件主要包括:

鼠标事件

click: 鼠标单击时触发; dblclick:鼠标双击时触发; mouseenter:鼠标进入时触发; mouseleave:鼠标移出时触发; mousemove:鼠标在DOM内部移动时触发; hover:鼠标进入和退出时触发两个函数,相当于mouseenter加上mouseleave。

键盘事件

键盘事件仅作用在当前焦点的DOM上,通常是<input><textarea>。
keydown:键盘按下时触发; keyup:键盘松开时触发; keypress:按一次键后触发。

其他事件

focus:当DOM获得焦点时触发; blur:当DOM失去焦点时触发; change:当<input>、<select><textarea>的内容改变时触发; submit:当<form>提交时触发; ready:当页面被载入并且DOM树完成初始化后触发。
其中,ready仅作用于document对象。由于ready事件在DOM完成初始化后触发,且只触发一次,所以非常适合用来写其他的初始化代码。假设我们想给一个<form>表单绑定submit事件,下面的代码没有预期的效果:

<html>
<head>
 <script>
  // 代码有误:
  $('#testForm).on('submit', function () {
   alert('submit!');
  });
 </script>
</head>
<body>
 <form id="testForm">
  ...
 </form>
</body>

因为JavaScript在此执行的时候,<form>尚未载入浏览器,所以$('#testForm)返回[],并没有绑定事件到任何DOM上。
所以我们自己的初始化代码必须放到document对象的ready事件中,保证DOM已完成初始化:

<html>
<head>
 <script>
  $(document).on('ready', function () {
   $('#testForm).on('submit', function () {
    alert('submit!');
   });
  });
 </script>
</head>
<body>
 <form id="testForm">
  ...
 </form>
</body>

这样写就没有问题了。因为相关代码会在DOM树初始化后再执行。
由于ready事件使用非常普遍,所以可以这样简化:

$(document).ready(function () {
 // on('submit', function)也可以简化:
 $('#testForm).submit(function () {
  alert('submit!');
 });
});

甚至还可以再简化为:

$(function () {
 // init...
});

上面的这种写法最为常见。如果你遇到$(function () {...})的形式,牢记这是document对象的ready事件处理函数。
完全可以反复绑定事件处理函数,它们会依次执行:

$(function () {
 console.log('init A...');
});
$(function () {
 console.log('init B...');
});
$(function () {
 console.log('init C...');
});

事件参数

有些事件,如mousemove和keypress,我们需要获取鼠标位置和按键的值,否则监听这些事件就没什么意义了。所有事件都会传入Event对象作为参数,可以从Event对象上获取到更多的信息:

$(function () {
 $('#testMouseMoveDiv').mousemove(function (e) {
  $('#testMouseMoveSpan').text('pageX = ' + e.pageX + ', pageY = ' + e.pageY);
 });
});

取消绑定

一个已被绑定的事件可以解除绑定,通过off('click', function)实现:

function hello() {
 alert('hello!');
}

a.click(hello); // 绑定事件

// 10秒钟后解除绑定:
setTimeout(function () {
 a.off('click', hello);
}, 10000);

需要特别注意的是,下面这种写法是无效的:

// 绑定事件:
a.click(function () {
 alert('hello!');
});

// 解除绑定:
a.off('click', function () {
 alert('hello!');
});

这是因为两个匿名函数虽然长得一模一样,但是它们是两个不同的函数对象,off('click', function () {...})无法移除已绑定的第一个匿名函数。

为了实现移除效果,可以使用off('click')一次性移除已绑定的click事件的所有处理函数。

同理,无参数调用off()一次性移除已绑定的所有类型的事件处理函数。

事件触发条件

一个需要注意的问题是,事件的触发总是由用户操作引发的。例如,我们监控文本框的内容改动:

var input = $('#test-input');
input.change(function () {
 console.log('changed...');
});

当用户在文本框中输入时,就会触发change事件。但是,如果用JavaScript代码去改动文本框的值,将不会触发change事件:

var input = $('#test-input');
input.val('change it!'); // 无法触发change事件

有些时候,我们希望用代码触发change事件,可以直接调用无参数的change()方法来触发该事件:

var input = $('#test-input');
input.val('change it!');
input.change(); // 触发change事件

input.change()相当于input.trigger('change'),它是trigger()方法的简写。

为什么我们希望手动触发一个事件呢?如果不这么做,很多时候,我们就得写两份一模一样的代码。

浏览器安全限制

在浏览器中,有些JavaScript代码只有在用户触发下才能执行,例如,window.open()函数:

// 无法弹出新窗口,将被浏览器屏蔽:
$(function () {
 window.open('/');
});

这些“敏感代码”只能由用户操作来触发:

var button1 = $('#testPopupButton1');
var button2 = $('#testPopupButton2');

function popupTestWindow() {
 window.open('/');
}

button1.click(function () {
 popupTestWindow();
});

button2.click(function () {
 // 不立刻执行popupTestWindow(),100毫秒后执行:
 setTimeout(popupTestWindow, 100);
});

当用户点击button1时,click事件被触发,由于popupTestWindow()click事件处理函数内执行,这是浏览器允许的,而button2click事件并未立刻执行popupTestWindow(),延迟执行的popupTestWindow()将被浏览器拦截。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# jQuery  # 事件  # jquery事件绑定方法介绍  # jQuery中的常用事件介绍  # jQuery的事件处理你知道多少  # JQuery绑定事件四种实现方法解析  # jQuery操作事件完整实例分析  # jquery事件与绑定事件  # jquery中绑定事件的异同  # jQuery事件详解  # 详解jQuery事件  # jQuery中的事件详解  # 绑定  # 鼠标  # 移除  # 这是  # 就会  # 弹出  # 将被  # 仅作  # 文本框  # 自己的  # 的是  # 超链接  # 直接调用  # 如果你  # 还可以  # 第一个  # 在此  # 不太  # 是由  # 已被 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  javascript读取文本节点方法小结  如何在宝塔面板中创建新站点?  如何在阿里云通过域名搭建网站?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  如何在IIS服务器上快速部署高效网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  如何在建站之星绑定自定义域名?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  如何用PHP快速搭建CMS系统?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Laravel如何集成Inertia.js与Vue/React?(安装配置)  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  nodejs redis 发布订阅机制封装实现方法及实例代码  Laravel安装步骤详细教程_Laravel环境搭建指南  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何挑选高效建站主机与优质域名?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  linux写shell需要注意的问题(必看)  如何在腾讯云免费申请建站?  如何快速生成凡客建站的专业级图册?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在IIS管理器中快速创建并配置网站?  高端云建站费用究竟需要多少预算?  西安专业网站制作公司有哪些,陕西省建行官方网站?  HTML 中动态设置元素 name 属性的正确语法详解  iOS发送验证码倒计时应用  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  大型企业网站制作流程,做网站需要注册公司吗?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  网页设计与网站制作内容,怎样注册网站?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  高防服务器如何保障网站安全无虞?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】