javascript事件之:jQuery事件中实例对象和拓展对象之间的通信

  我们总结过jQery事件中的实例原型对象对外接口和拓展对象,现在我们看看他们是如何进行通信联系的。

先来看便捷方法:

 1 //调用的还是实例对象下的on()和trigger()
 2 jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
 3     "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
 4     "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
 5     jQuery.fn[ name ] = function( data, fn ) {
 6         return arguments.length > 0 ?
 7             this.on( name, null, data, fn ) :
 8             this.trigger( name );
 9     };
10 });
11 
12 jQuery.fn.extend({
13     //调用的是上面实例的mouseenter和mouseleave
14     hover: function( fnOver, fnOut ) {
15         return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
16     },
17     //调用的是实例下的on
18     bind: function( types, data, fn ) {
19         return this.on( types, null, data, fn );
20     },
21     //调用的是实例下的off
22     unbind: function( types, fn ) {
23         return this.off( types, null, fn );
24     },
25     //调用的是实例下的on
26     delegate: function( selector, types, data, fn ) {
27         return this.on( types, selector, data, fn );
28     },
29     //调用的是实例下的off
30     undelegate: function( selector, types, fn ) {
31         // ( namespace ) or ( selector, types [, fn] )
32         return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
33     }
34 });

所以便捷方法知识调用了实例下的on,off,triger三个方法。其本身的学习价值不高。

接下来是另外几个供便捷方法调用的实例方法。

 1 jQuery.fn.extend({
 2     //调用的是jQuery.event下的add()
 3     on: function( types, selector, data, fn, /*INTERNAL*/ one ) { 
 4         jQuery.event.add( this, types, fn, data, selector );...
 5     },
 6     //调用的是上面的on
 7     one: function( types, selector, data, fn ) {
 8         return this.on( types, selector, data, fn, 1 );
 9     },
10     //调用的是jQuery.event下的remove()
11     off: function( types, selector, fn ) {
12         jQuery.event.remove( this, types, fn, selector );...
13     },
14     //调用的是jQuery.event下的trigger()
15     trigger: function( type, data ) {
16         return this.each(function() {
17             jQuery.event.trigger( type, data, this );
18         });
19     },
20     //调用的是jQuery.event下的trigger()
21     triggerHandler: function( type, data ) {
22         return jQuery.event.trigger( type, data, elem, true );...
23     }
24 })    

这里调用的主要是jQuery.event下的3个方法:add(), remove(), trigger()。其本身的学习意义也不大。我们来看jQuery.event下的这三个方法。

 1 jQuery.event = {
 2     global: {},
 3     //绑定事件
 4     add: function( elem, types, handler, data, selector ) {
 5         ...
 6         special = jQuery.event.special[ type ] || {};
 7         ...
 8         jQuery.event.dispatch.apply( eventHandle.elem, arguments )
 9         
10     },
11     //移除事件
12     remove: function( elem, types, handler, selector, mappedTypes ) {
13         ...
14         special = jQuery.event.special[ type ] || {};
15         if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
16     },
17     //手动触发事件
18     trigger: function( event, data, elem, onlyHandlers ) {},
19     //事件分发
20     dispatch: function( event ) {},
21     handlers: function( event, handlers ) {},
22     props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
23     fixHooks: {},
24     //对键盘事件对象的属性和修正方法
25     keyHooks: {},
26     //对鼠标事件对象的属性和修正方法
27     mouseHooks: {},
28     //兼容性相关
29     fix: function( event ) {},
30     //事件修正对象集
31     special: {
32         load: {
33             noBubble: true
34         },
35         focus: {
36             trigger: function() {},
37             delegateType: "focusin"
38         },
39         blur: {
40             trigger: function() {},
41             delegateType: "focusout"
42         },
43         click: {
44             trigger: function() {},
45             _default: function(){}
46         },
47         beforeunload: {
48             postDispatch: function( event ) {}
49         }
50     },
51     //模拟事件,修正事件兼容性游泳
52     simulate: function( type, elem, event, bubble ) {}
53 }

jQuery事件对象下的这三个方法是主题。其余都是修正浏览器的兼容性和为这三个方法服务的工具方法。

 

转载于:https://www.cnblogs.com/pfzeng/p/4158695.html

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

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

相关文章

SQL 中的unicode字符

要将字符转换成unicode字符以显示某些符号,可以在字符串前加N,如: select N♧♡♂♀♠♣♥❤☜☞☎☏ 转载于:https://www.cnblogs.com/Laro/archive/2011/03/07/1976483.html

html5 ajax数据显示,html5的ajax学习(二)

一、基础知识点1.ajax可以做事情:局部刷新 浏览器搜索列表记录 加载更多的数据2.登录页面同步网络请求:页面全部刷新,用户量大体验很不好3.ajax的详解:ajax的get和post请求 同步还是异步,true为异步ajax.open("ge…

后羿采集器怎么导出数据_后羿SEO:如何用后羿采集器查收录?(附详细步骤图)...

摘要:不知道大家查收录是用啥查的,或许市面上有工具,可以批量查,但是这些工具不是收费就是查询结果不太准确。今天狠人SEO教大家一个查询结果比较准确的方法。如标题写的,...不知道大家查收录是用啥查的,或…

ISA Server服务器故障恢复一例系统盘符更换之后的应对方法

周四下午的时候,某政府信息中心领导打电话告诉我,ISA Server服务器不能开机了。随后公司的技术员到达现场,经过检查,发现服务器显卡损坏。在更换显卡后,服务器可以开机,但却不能进入系统—-服务器在经过BIO…

有梦想就有前进的动力

有梦想就有前进的动力,我为自己代言转载于:https://blog.51cto.com/9730193/1589340

扩展Windows Mobile模拟器存储空间的方法

在Windows Mobile应用程序开发的初期,可以使用SDK自带的模拟器来进行调试,这给我们开发人员提供了一种方便的途径。一般的应用程序,占用空间的大小也就几 百K,或者几M,这在模拟器上调试起来一点问题也没有。但是有的时…

UOS LoongArch 上成功安装.NET Core 3.1

龙芯.NET团队正式发布了.NET Core 3.1 For LoongArch, 具体参见龙芯开源网站 http://www.loongnix.cn/index.php/Dotnet 。进入安装包下载地址LoongArch64-.NET Core 3.1,可以看到龙芯.NET团队做了很多工作,为Debian和Redhat两大Linux体系平台都做好了基…

c++ vector拷贝构造_JDK源码分析-Vector

1. 概述上文「JDK源码分析-ArrayList」主要分析了 ArrayList 的实现原理。本文分析 List 接口的另一个实现类:Vector。Vector 的内部实现与 ArrayList 类似,也可以理解为一个「可变数组」。其继承结构如下(省略部分接口)&#xff…

除了PS,原来这个也可以轻松实现图像处理!

全世界只有3.14 % 的人关注了爆炸吧知识在我们生活中,常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而,并非只有软件才能实现图像处理,通过编程手段也是能实现的!今天,小天将要带着大家走进计算机视觉…

HTML5视频和音频常见的格式,HTML5 音频和视频

HTML5 特性,包括原生音频和视频支持而无需 Flash。HTML5 和 标签让我们给站点添加媒体变得简单。我们只需要设置 src 属性来识别媒体资源,包含 controls 属性让用户可以播放和暂停媒体。嵌入视频下面是在 Web 页面中嵌入视频文件最简单的形式&#xff1a…

北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略

原标题:【导航论坛】北斗三号卫星导航信号及接收策略编者按以“5G/GNSS高精度定位与空间数据深度应用”为主题的高峰论坛上,来自清华大学的陆明泉教授为与会代表带来了题为《北斗三号卫星导航信号及接收策略》的主题报告。陆教授首先对报告的题目作了一个…

下雨天纵使少了什么也是少不了一把伞的,即使是几千年前,也不管细雨霏霏,大雨倾盆。愿意沐浴风雨中,享受这样惠泽的人总是少的。从“孤舟蓑笠翁,独钓寒江雪”,“十里一长亭,五里一短亭”&#xf…

oracle用户名密码过期引起的网站后台无法登录

本来今天休息,但是接到同事反映:客户的WEB无法登录了,网站能打开,但是后台登录不了。我就联系了客户,客户说是WEB用户的密码过期导致的,默认是180天到期。接着就是我的操作流程了:1.先从WEB服务…

微服务的终极目标,Mecha分布式运行时之Dapr

1. Mecha 是啥?微服务发展到今天,已经有很多公司多年前已经改造完毕,也有些公司还在路上,微服务的优势,有过了解的朋友应该也都能说出个一二三来,经历过微服务改造的,应该都知道其中的艰辛。单体…

java mina unix client

/Files/nanshouyong326/MinaTest.rar转载于:https://www.cnblogs.com/nanshouyong326/archive/2011/03/15/1985130.html

python input输入多个变量_「Python 秘籍」1.2 解压可迭代对象赋值给多个变量

问题需要从某个可迭代对象中分解出 N 个元素,但是这个可迭代对象的长度可能超过 N,这会导致出现“需要解包的值过多(too many values to unpack)”的异常。解决方案“星号表达式”可以用来解决这个问题。例如,假设开设了一门课程,…

为什么不谈恋爱?

1 存好啦!2 这是我看过最形象的小说描写了图自天秀bot3 原来游泳池是这样建的。。4 这谁还舍得拉绳子啊5 铁笼:大哥,给点面子好不好?6 别说,这门给狗子放头还挺合适的7 机器人骑自行车你点的每个赞,我都认真…

jpa 默认生成sql语句_springboot-jpa自动创建数据库表

第一步创建springboot项目,jpa,mysql,代码如下:application.ymlspring:datasource:url: jdbc:mysql://127.0.0.1:3306/springboot_testusername: rootpassword: 514730driver-class-name: com.mysql.jdbc.Driverjpa:hibernate:# 更新或者创建数据表结构d…

html怎么做交互留言,简单html与servlet交互

1.usercheck.htmlhref"../lib/ligerUI/skins/Aqua/css/usertext.css" rel"stylesheet"type"text/css" />填写用户名/>id"verifyButton"/>>2.usertext.css.userClass {border: 1px solid red ;background-image:url(../../…

系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab

[索引页][]系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab, Spinner, Chronometer, ScrollView作者:webabcd介绍在 Android 中使用各种控件(View) ZoomControls - 放大/缩小按钮控件Include - 整合控件VideoView - 视…