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事件对象下的这三个方法是主题。其余都是修正浏览器的兼容性和为这三个方法服务的工具方法。

时间: 2024-10-13 00:34:34

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

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

VLAN基础(三)在GNS3 1.3.10中使用三层交换完成不同VLAN之间的通信

VLAN基础(三)在GNS3 1.3.10中使用三层交换完成不同VLAN之间的通信 简介: 三层交换技术就是:二层交换技术+三层转发技术.它解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速.复杂所造成的网络瓶颈问题.每个VLAN对应一个IP网段.在二层上,VLAN之间是隔离的,这点跟二层交换机中交换引擎的功能是一模一样的.不同IP网段之间的访问要跨越VLAN,要使用三层转发引擎提供的VLAN间路由功能.在使用二层交换机和路由器的组网中,每个需要与其他IP网

JavaScript之jQuery-4 jQuery事件(页面加载后执行、事件处理、事件冒泡、事件对象、模拟操作)

一.jQuery 页面加载后执行 代码执行的时机选择 - $(document).ready()方法和 window.onload事件具有相似的功能,但是在执行时机方面是有区别的 - window.onload 事件是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行 - $(document).ready()方法注册的事件处理程序,在DOM完全加载后就可以调用 - 一般来讲, $(document).ready()的执行要优于window.onload事件 - 需要注意的是,

02 js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍

IE 左键是 window.event.button = 1 右键是 window.event.button = 2 中键是 window.event.button = 4 没有按键动作window.event.button = 0 Firefox 左键是 event.button = 0 右键是 event.button = 2 中键是 event.button = 1 没有按键动作 event.button = 0 Opera 7.23/7.54 鼠标左键是 window.event.but

DOM事件与jQuery事件的是非纠葛

在javascript和JQuery之中,都有事件的处理方式,在我们编写程序实现某些功能的时候,我们会发现使用原生的DOM事件与JQuery中封装的事件都能实现同样的效果,那么也许我们会认为他们之间的区别不是很大,甚至说基本没有区别.这种观点是错误的,其实在事件函数的底层设计时,他们赋予元素的事件属性是通过不同的事件绑定机制来实现的. 我们先从表面理解:我们都知道,JQuery是javascript的一个函数库,他是基于javascript原生设计的.就是说JQuery中的事件,都是通过java

JQuery的事件委托;jQuery注册事件;jQuery事件解绑

一.事件 ①事件委托:就是给子元素的父元素或者祖先元素注册一个事件,但是事件的执行者是子元素,委托事件的好处是能够给动态创建出来时元素也加上事件. ②简单事件:就是给自己注册事件自己执行动态创建出来的事件不会有事件. ③使用方法:$("span").on("click",function(){alert("这是一个简单事件");}): $("div").on("click", "span"

彻底弄懂jQuery事件原理二

上一篇说到,我们在最外层API的on,off,tiggler,triggerHandler调用的是event方法的add,remove和tirgger方法,本篇就来介绍event辅助类 \ 先放个图,这其实就是整个事件流程的过程: 1. add方法: add: function(elem, types, handler, data, selector) { var handleObjIn, eventHandle, tmp, events, t, handleObj, special, hand

html事件-子元素事件不触发父元素事件

<div class="list-row" onclick="showChatDialog('dy','100000001',true);"> <img class="icon" src="/icon/default.ico" onclick="personData(event,100000001);"> <a class="nickname">dy&

事件冒泡和事件默认行为

1.原生态事件 取得原生态的事件对象: <button onclick="get(event)" type="button">tijiao</button> 阻止事件冒泡: 1 //如果提供了事件对象,则这是一个非IE浏览器 2 if ( e && e.stopPropagation ) 3 //因此它支持W3C的stopPropagation()方法 4 e.stopPropagation(); 5 else 6 //否则,