`
ioryioryzhan
  • 浏览: 153599 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为jQuery添加自定义事件机制

阅读更多

    之前一直做flex,现在来做js,觉得js的事件机制不是很好用,参考flex的事件机制为jQuery开发一个插件,即自定义事件。 利用这个插件,jQuery对象能够派发自定义的事件,而父级的对象能够对此事件进行监听,对事件的处理依次分为捕获,目标,冒泡三个阶段。

    捕获:从根结点出发,到派发事件的目标对象,如果注册了监听,即会执行监听函数。默认时,不打开捕获

    目标:发出事件的目标对象,如果注册了监听,即会执行监听函数

    冒泡:捕获的反过程,即从目标对象出发,依次调用父级对象的监听函数。默认时,打开冒泡

 

给个例子:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>text jquery.jevent.js</title>
		<script type="text/javascript" src="jquery-1.2.6.js"></script>
		<script type="text/javascript" src="jquery.jevent.js"></script>
		<script type="text/javascript" >
			var str1 = "Click1";
			var str2 = "Click2";
			$(document).ready(function(){
                          $("#div1").  addJEventListener(str1,  function(data,str){alert("div1"+"@"+data.msg+"@"+str);},true);
                          $("#div11").addJEventListener(str1,   function(data,str){alert("div11"+"@"+data.msg+"@"+str);},true);
                          $("#div2").  addJEventListener(str2,           function(data,str){alert("div2"+"@"+data.msg+"@"+str);},true);
                          $("#div21").addJEventListener(str2,           function(data,str){alert("div21"+"@"+data.msg+"@"+str);});
                          $("#button1").addJEventListener(str1,       function(data,str){alert("button1"+"@"+data.msg+"@"+str);});
                          $("#button2").addJEventListener(str2,       function(data,str){alert("button2"+"@"+data.msg+"@"+str);},true);
                          $("#button1").click(function(){
	                         $(this).dispatchJEvent(str1,{msg:"msg from button1"});
                          });
                         $("#button2").click(function(){
                                $(this).dispatchJEvent(str2,{msg:"msg from button2"});
                         });				
	               });
		</script>
	</head>
	<body>
		
	  <div id="div1">
	   <div id="div11">
		<img id="img1" src="pic3.jpg" width="140" height="140"/>
		<input type="button" id="button1" value="click Me 1!"/>
	   </div>
	  </div>
	  
	   <div id="div2">
	   <div id="div21">
		<img id="img2" src="pic5.jpg" width="140" height="140"/>
		<input type="button" id="button2" value="click Me 2!"/>
	   </div>
	  </div>
	  
	</body>
</html>

 

这个例子中,各级结点都通过addJEventListener()分别注册了对"Click1"或"Click2"事件的监听,而点击button1时,会通过dispatchJEvent()派发事件,例子可以从附件中下载 。如点击button1时,依次alert的结果为:

 

div1@msg from button1@capture         //div1在捕获click1事件

div11@msg from button1@caputre       //div11在捕获click1事件

button1@msg from button1@target     //目标对象button1执行监听函数

div11@msg from button1@bubble        //div11在冒泡过程中执行监听函数

div1@msg from button1@bubble          //div1的冒泡过程中执行监听函数

 

可见先严格地执行了上面提到的处理事件的步骤。

 

细节部分:

1、当事件被派发时,只有目标对象的父级对象能够得到处理事件的机会,如将上面的div2同样也注册对"Click1"的监听,便不会被调用,因为div2并不是button1的父级对象。

2、对象在注册对某一事件的监听时,可以选择是否找开捕获或冒泡,如果打开捕获,则在事件处理的捕获时即会执行监听函数,默认时捕获不打开,冒泡打开。

3、同一对象可以对某一事件多次注册监听,当然也可以删除对事件的监听

 

对插件提拱的扩展介绍如下:

1、dispatchJEvent: function(name,data,capture,bubble)

    jQuery对象通过此函数来派发事件,

    name是事件的标识,为一个字符串,

    data为事件所携带的信息,该信息会做为参数传递给监听函数,如上例 中button1的data为{msg:"msg from button1"},

    capture指示对该事件的处理是否开启捕获过程,默认为true,

    bubble指示对该事件的处理是否开启冒泡过程,默认为true.

2、addJEventListener:function(name,func,capture,bubble);

   jQuery对象可以通过此函数来注册对事件的监听,

   name仍是事件的标识,表示注册的是对哪个事件的监听,

   capture表示该监听是否参与事件处理的捕获过程,默认为false

   bubble表示是否参与事件处理的冒泡过程,默认为true,

   func为所注册的监听函数,func定义的格式为 function(data,state) {},data即为事件派发时的参数,state代表此时处理过程位于哪个阶段,是"capture","target"不是"bubble".

3、removeJEventListener:function(name,func);删除对已经注册的监听

4、hasJEventListener:function(name);判断是否已经注册了对某一事件的监听

 

有了这个插件,应该可以提高jQuery的开发速度了。发上来与大家分享,期待大家的宝贵意见!

 

 

  • jQueryEvent.rar (52.1 KB)
  • 描述: jQuery自定义事件插件
  • 下载次数: 299
5
0
分享到:
评论
2 楼 chzhi 2011-09-09  
1楼睿智。。。
1 楼 gfcsquare 2011-04-06  
这么好的文章怎么只浏览下载 不赞一个
百姓商城

相关推荐

    jQuery基础教程(第四版)

    第3章介绍如何通过jQuery的事件处理机制,在浏览器发生事件时触发行为。同时,还会介绍如何以不唐突的方式添加事件(甚至在页面加载完成之前)。此外,这一章还将深入更高级的主题,例如事件冒泡、委托和命名空间。 ...

    基于Layer+jQuery的自定义弹框

    已分中心管理的添加分中心弹框实现机制为例&gt; 1.弹框页面部分的html代码和css抽离 html : html/configure/layer-win/_group-add-layer.html css : css/common/componnentWin.css &lt;自定义弹窗通用样式&gt; 子层...

    jQuery详细教程

    当我们在教程中演示 jQuery 时,会将函数直接添加到 &lt;head&gt; 部分中。不过,把它们放到一个单独的文件中会更好,就像这样(通过 src 属性来引用文件): 实例 &lt;script type="text/javascript" src="jquery.js"&gt; ...

    jQuery插件扩展实例【添加回调函数】

    主要介绍了jQuery插件扩展的方法,结合实例形式分析了jQuery插件添加回调函数与事件触发机制的相关操作技巧,需要的朋友可以参考下

    asp .net demo

    Asp .Net 运行机制 系统对象 跨页面数据传递 控件 TreeView TreeView 添加 CheckBox GridView GridView 添加 多选和光棒效果 GridView 获取选中复选框 AspNetPager DropDownList 验证控件 ...

    PlugNT CMS V3.9正式版源码20130809

    功能亮点: 栏目和模型多对多,即一个栏目可以绑定多个模型,一个模型也可以绑定多个栏目 ...18.添加自定义表单 19.添加标签管理 20.添加高亮显示 21.优化预加载 22.添加多个公共通用函数 23.添加表单多选框,单选框

    PlugNT CMS V3.9正式版源码

    18.添加自定义表单 19.添加标签管理 20.添加高亮显示 21.优化预加载 22.添加多个公共通用函数 23.添加表单多选框,单选框 后台编辑用户名:test 密码:test 后台超级管理员:51aspx 密码:51aspx

    WEB后台管理基础框架

    1、数据库读写分离 2、数据接口直接生成,不用手动单独添加 3、按钮通过页面配置,自动新增按钮,不用单独添加 4、角色、机构权限控制 5、shiro授权 6、前后端代码生成 ...22、前端使用vue.js、jquery等

    ASP.NET MVC 3高级编程

    6.1.2 自定义错误提示消息及其本地化 121 6.1.3 注解的后台原理 122 6.1.4 控制器操作和验证错误 123 6.2 自定义验证逻辑 125 6.2.1 自定义注解 125 6.2.2 ivalidatableobject 128 6.3 显示和编辑注解 129 ...

    庖丁解牛:纵向切入ASP.NET 3.5控件和组件开发技术

    5.2 事件和数据回发机制的实现 148 5.2.1 客户端回传事件接口ipostbackeventhandler 148 5.2.2 客户端回发/回调揭密 150 5.2.3 回传数据处理接口ipostbackdatahandler 153 5.2.4 正确处理继承基类中控件的事件 ...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part1

    注意:由于文件大小为111MB,但本人的上传权限只有60MB,所以分开两部分压缩上传。解压前必须与part2一起解压。part2在本人的资源里可以找到:http://download.csdn.net/user/lxm0918 第1章 服务器控件概述及开发...

    X-Blog V1.0 正式版

    添加自定义验证码功能 9.添加后台修改数据库目录,管理目录,日志目录,图片目录功能 V1.0 Beta4 更新 1.添加会员系统 2.添加最近更新(New.asp)及热门点击(Hot.asp) 3.后台添加查找功能分定位分页功能 4.添加...

    庖丁解牛 纵向切入ASP.NET 3.5控件和组件开发 part2

    注意:由于文件大小为111MB,但本人的上传权限只有60MB,所以分开两部分压缩上传。解压前必须与part2一起解压。part2在本人的资源里可以找到:http://download.csdn.net/user/lxm0918 第1章 服务器控件概述及开发...

    PlugNTCMSv3.6正式版源码2012929

    1、功能强大:Web所使用功能,包括基础功能(内容管理,无限栏目,文件管理,全站生成静态,全站伪静态,自定义,批量 上传,用户整合接口,字段标签定义,广告、留言、评论、友情管理等),及亮点功能(多模型扩展,...

    PHPnew blog 博客源码 v1.0.rar

    独创的url访问模式, 及模板目录结构, 常量定义及整体的分类目录, 都为blog添加色彩.代码中尽可能保留了注释, 适合于二次开发及其它扩展. 此程序目前仍然很小, 甚至插件模式都没有布置, 目前先发一个测试版待技术员...

    PlugNT CMS 3.6 正式版

    1、功能强大:Web所使用功能,包括基础功能(内容管理,无限栏目,文件管理,全站生成静态,全站伪静态,自定义,批量上传,用户整合接口,字段标签定义,广告、留言、评论、友情管理等),及亮点功能(多模型扩展,...

    python入门到高级全栈工程师培训 第3期 附课件代码

    05 jquery事件绑定与事件委托 06 jquery动画效果 07 jquery扩展与插件 08 jquery扩展补充 09 本周作业轮播图以及思路 第45章 轮播图片css部分 轮播图片js部分 第46章 01 数据库与dbms的概念 02 sql规范 03 ...

    PlugNT CMS v3.5正式版源码

    PlugNT CMS,一款免费开源ASP.NET内容管理系统,PlugNT系统组成部分之一,系统采用ASP.NET(C#) + jQuery技术,是一个功能强大、操作人性化、搜索引擎优化、高效性、安全性、扩展性强的Web系统,产品主要优点有以下几...

    java项目之oa办公管理系统(java毕业设计)

     1、前端:jsp、css、javascript、jQuery(js框架)、jQueryEasyUi(基于jQuery的前端框架)+BootStrap(前端框架)、dTree插件、富文本编辑器等  2、后台:SpringMvc、Spring、Hibernate(持久层框架)、JPA、MD5加密、...

Global site tag (gtag.js) - Google Analytics