jQuery绑定自定义事件的魔法升级版


Posted in Javascript onJune 30, 2016

jQuery绑定自定义事件

首先让我们来看看jQuery绑定自定义事件的使用方法,你可以使用bind或者live来订阅一个事件(当然1.7以后也可以使用on了),代码如下:

$("#myElement").bind('customEventName',function(e){ ... });
$(".elementsClass").live('customEventName',function(e){ ... });

然后通过如下方式来触发事件:

$("#myelement").trigger('customEventName');

或者你也可以为自定义事件增加额外的参数,样例如下:

$("#myelement").bind('customEventName',function(e,data){ if(data.custom) ... });
$("#myelement").trigger('customEventName',{ custom: false });

魔法升级

所谓魔法升级,其实是想让整个程序所有的自定义事件能够自动注册并绑定jQuery上,然后执行的时候,所有注册该事件的模块都会执行。比如模块User.js里定义的UserUpdate方法和Blogs.js里定义的BlogUpdate方法都定义了在发布一篇博客的时候需要执行的function函数,整个时候我们可以通过注册统一的事件名称(例如BlogAdded)bind到jQuery指定的一个容器上(例如document)上,然后发布博客成功以后,执行$(document).trigger("BlodAdded")就OK了。

下面我们给个通用的样例代码:

var components = [User, Blog, Group, Friend, Topic, Photo];
var eventTypes = ["AddComplete", "UpdateComplete", "DeleteComplete", "LockComplete", "UnLockComplete"];
$.each(components, function(i,component) {
 $.each(eventTypes, function(i,eventType) {
  var handler = component[eventType];
  if (handler) $(document).bind(eventType, handler);
 });
})

然后每个js模块定义的代码安装如下格式:

User= {
 AddComplete: function(e, data) {
 //...
 },
 UpdateComplete: function(e, data) {
 //...
 }
}
 

这样,不管在任何地方,如果我们需要的话,就可以使用jQuery的方式来触发我们的事件了:

$(document).trigger("UpdateComplete", data);

通过这种方法,大家可以发现一个模块的method只能注册一个事件,那如果我们通过一个方法来注册多个事件触发的话,可以使用如下方式:

var blogController = {
 blogAddOrUpdateComplete: function() {
 //...
 }
}
blogController.blogAddComplete = blogController.blogUpdateComplete = blogController.blogAddOrUpdateComplete;

最后注意:本文只是展示一个简单的例子,不要混用不同module同一事件名称的用法哦,比如,User.js里的AddComplete和Blog.js里的AddComplete可能根本就没有关系,也就是说只处理自己相应的逻辑,这时候,就不应该统一处理这个事件,但如果要检测的东西是一样的话,就可以使用,比如DisableUserComplete,就可以通用,因为User模块需要处理禁用账户以后的操作,Blog模块可能也需要处理禁用账户以后的操作。

以上就是本文的全部内容,了解更多jQuery的语法,大家可以查看:《jQuery 1.10.3 在线手册》,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
js过滤HTML标签以及空格的思路及代码
May 24 Javascript
js禁止回车提交表单的示例代码
Dec 23 Javascript
jQueryMobile之Helloworld与页面切换的方法
Feb 04 Javascript
JavaScript中string对象
Jun 12 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
JS实现留言板功能
Jun 17 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
原生javascript制作贪吃蛇小游戏的方法分析
Feb 26 Javascript
js实现小星星游戏
Mar 23 Javascript
Vue中key的作用示例代码详解
Jun 10 Javascript
JS实现炫酷轮播图
Nov 15 Javascript
jQuery Ajax 上传文件处理方式介绍(推荐)
Jun 30 #Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 #Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
Jun 30 #Javascript
浅谈JS中json数据的处理
Jun 30 #Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 #Javascript
JS中Json数据的处理和解析JSON数据的方法详解
Jun 29 #Javascript
简单实现js间歇或无缝滚动效果
Jun 29 #Javascript
You might like
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
javascript常用功能汇总
2015/07/05 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
Python文件的读写和异常代码示例
2017/10/31 Python
python实现黑客字幕雨效果
2018/06/21 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
平面设计自荐信
2013/10/07 职场文书
医科学校毕业生自荐信
2013/11/09 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
小学新学期寄语
2014/04/02 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
教师师德表现自我评价
2015/03/05 职场文书
病危通知单
2015/04/17 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android