jQuery源码分析系列:事件模块概述

jQuery的事件模块是较复杂的,前面仅仅提到了对事件对象的包装。即统一了一些兼容性的问题。这篇会综述下jQuery的整个事件模块。后面会详细分析jQuery.event.add/jQuery.event.remove/jQuery.event.trigger。


虽然事件模块代码很难读,但其提供的API接口还是很清晰的。如下


1 添加事件(bind/one/live/delegate/hover/toggle)

bind 基本的添加事件函数。

one 添加只执行一次的事件函数。

live 事件代理(使用document代理)。

delegate 事件代理(使用指定元素代理)。

hover 模拟css的hover。

toggle 显示/隐藏。


bind/one/live 都是使用内部的jQuery.event.add 来完成事件添加。

delegate 内部调用的是live。

hover 内部使用mouseenter/mouseleave,而mouseenter/mouseleave又使用bind。

toggle 内部使用click,而click内部又调用的是bind。


实际上jQuery的一个each调用就给jQuery对象上增加了24个添加事件的快捷方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
    "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
    "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
  
    // Handle event binding
    jQuery.fn[ name ] = function( data, fn ) {
        if ( fn == null ) {
            fn = data;
            data = null;
        }
  
        return arguments.length > 0 ?
            this.bind( name, data, fn ) :
            this.trigger( name );
    };
  
    if ( jQuery.attrFn ) {
        jQuery.attrFn[ name ] = true;
    }
});

如下图


记住,bind调用的是jQuery.event.add,因此 jQuery.event.add 才是整个jQuery添加事件模块的核心。以上所有的方法都是在其之上构建的上层应用。如图


2 删除事件 (unbind/die/undelegate)

unbind 删除事件基础方法。可以删除一个指定handler,还可以删除某类型事件的全部handler,甚至可以删除挂在element上的全部事件。其内部调用jQuery.event.remove。

die/undelegate 删除事件代理。 内部都使用unbind。


因此, jQuery.event.remove 才是整个jQuery删除事件模块的核心。unbind/die/undelegate都是在其之上构建的上层应用。如图


3 触发事件(trigger/triggerHandler)

trigger 触发一个事件(会冒泡)

triggerHandler 触发一个事件(不会冒泡)


trigger/triggerHandler 内部调用的都是jQuery.event.trigger,因此jQuery.event.trigger 才是整个jQuery触发事件模块的核心。如图

原文路径:http://www.cnblogs.com/snandy/archive/2011/06/27/2085062.html

转载于:https://www.cnblogs.com/colorstory/archive/2013/04/11/2617809.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode MySQL 1159. 市场分析 II(rank+over)

文章目录1. 题目2. 解题1. 题目 表: Users ------------------------- | Column Name | Type | ------------------------- | user_id | int | | join_date | date | | favorite_brand | varchar | ------------------------- user_id 是该表的主键…

linux基础 linhaifeng,Linux 基础命令(一)

Linux 基础:Linux 比 Windows 更稳定做服务器,开发出来的软件需要在服务器上运行# 测试硬盘速度dd if/dev/zero ofsdb5/test bs10G count1# 写一个 10G 的文件写文件 input fileout file block size1. 操作系统内核与系统调用1.1 操作系统操作系统是用来…

python中elif和while简单介绍及注意事项(含笔记)

一、elif 想一想: if能完成当xxx时做事情;if-else能完成当xxx时做事情1,否则做事情2; 如果有这样一种情况:当xxx1时做事情1,当xxx2时做事情2,当xxx3时做事情3,那该怎么实现呢? 答…

oracle 从别的数据库获取数据 ,访问其他数据库

在某个oracle数据库,获取其他oracle数据库中的数据,需要建立database link,在使用语句获取数据 假设前置机实例名prod,你要查询的用户scott密码tiger在本机:create database link xxx connect to scott identified by tiger usingprod;成功连…

linux怎么安装32电脑上,linux – 如何在Ubuntu上安装mingw32?

仔细查看实际可用的内容:eddmax:~$apt-cache search mingw-libassuan-mingw-w64-dev - IPC library for the GnuPG components -- Windows portlibgcrypt-mingw-w64-dev - LGPL Crypto library - Windows developmentlibgpg-error-mingw-w64-dev - library of error…

LeetCode MySQL 262. 行程和用户

文章目录1. 题目2. 解题1. 题目 Trips 表中存所有出租车的行程信息。 每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。 Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’…

花了一年时间开发出来的基于DXF文件的加工路径自动生成软件

随着科技水平的进步,计算机辅助制造技术CAD/CAM在机械加工中起着越来越重要得作用,传统的手动编程正在被自动编程所取代,目前PRO/E,UG,MasterCAM等商业软件可以根据设计的图形直接生成数控加工代码。然而这些软件相对来说功能复杂,不易掌握&a…

LeetCode 1136. 平行课程(拓扑排序)

文章目录1. 题目2. 解题1. 题目 已知有 N 门课程,它们以 1 到 N 进行编号。 给你一份课程关系表 relations[i] [X, Y],用以表示课程 X 和课程 Y 之间的先修关系:课程 X 必须在课程 Y 之前修完。 假设在一个学期里,你可以学习任…

linux强制停止压缩任务,6.25任务(linux压缩、打包命令:zip、tar)

6.5 zip压缩工具前面的三个命令都不支持压缩目录,但是zip支持:首先压缩文件[rootlocalhost gzip]# yum -y install zip[rootlocalhost gzip]# zip b.txt.zip b.txtadding: b.txt (deflated 74%)[rootlocalhost gzip]# ls //原文件依旧存在。不…

【Android】Uri和Url和URN

最早在Android方面接触这两个概念,是学习ContentProvider的时候,当时花了很多时间,始终不能很好的理解他们的区别,顺带着ContentProvider的用法也无法理解,最近通过实现网页链接和Android-APP的无缝跳转问题&#xff0…

LeetCode 1259. 不相交的握手(DP)

文章目录1. 题目2. 解题1. 题目 偶数 个人站成一个圆,总人数为 num_people 。 每个人与除自己外的一个人握手,所以总共会有 num_people / 2 次握手。 将握手的人之间连线,请你返回连线不会相交的握手方案数。 由于结果可能会很大&#xf…

查看系统表存储过程名称

SELECT *,OBJECT_NAME(id) FROM syscomments转载于:https://www.cnblogs.com/niaowo/archive/2013/04/21/3033668.html

外星人装深度linux,17xR4深度拆机教程、加装MSATA固态硬盘及评测

本帖最后由 wellsyue 于 2012-6-20 20:45 编辑看到其他板块在三代IVY推出后,陆续发布了很多加装MSATA的帖子,发现外星人板块还没有17R4加装MSATA的帖子,在此,发布M17x R4加装MSATA教程一贴,既然是教程,就应…

LeetCode 248. 中心对称数 III(DFS/BFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个数。 示例: 输入: low "50", high "10…

sysctl简介

sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。 命令格式: sysctl [-…