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 相关文章推荐
JS实现浏览器菜单命令
Sep 05 Javascript
使用Firebug对js进行断点调试的图文方法
Apr 02 Javascript
jQuery 拖动层(在可视区域范围内)
May 24 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
May 16 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 Javascript
Bootstrap Modal遮罩弹出层(完整版)
Nov 21 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
Vue自定义指令详解
Jul 28 Javascript
JS表单传值和URL编码转换
Mar 03 Javascript
vue debug 二种方法
Sep 16 Javascript
JavaScript实现打砖块游戏
Feb 25 Javascript
使用Vant完成通知栏Notify的提示操作
Nov 11 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
重置版战役片段
2020/04/09 魔兽争霸
php使用qr生成二维码的示例分享
2014/01/20 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
Javascript对象Clone实例分析
2015/06/09 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
微信小程序实现传参数的几种方法示例
2018/01/10 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
python批量制作雷达图的实现方法
2016/07/26 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
详解python pandas 分组统计的方法
2019/07/30 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
Python流程控制 while循环实现解析
2019/09/02 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
计算机应用职专应届生求职信
2013/11/12 职场文书
劳资人员岗位职责
2013/12/19 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
2014年工程工作总结
2014/11/25 职场文书
党员个人承诺书
2015/04/27 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
2016年春季运动会加油稿
2015/07/22 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python