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 String对象中常用方法小结(字符串操作)
Jan 27 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
input点击后placeholder中的提示消息消失
Jan 15 Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 Javascript
详解js中==与===的区别
Jan 08 Javascript
Node调用Java的示例代码
Sep 20 Javascript
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
页面点击小红心js实现代码
May 26 Javascript
记录一次开发微信网页分享的步骤
May 07 Javascript
vue中实现高德定位功能
Dec 03 Javascript
vue实现购物车结算功能
Jun 18 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 编程安全性小结
2010/01/08 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
可插入图片的TEXT文本框
2013/12/27 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
js转html实体的方法
2016/09/27 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
python 排列组合之itertools
2013/03/20 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
python time()的实例用法
2020/11/03 Python
python 实现表情识别
2020/11/21 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
采购文员岗位职责
2013/11/20 职场文书
理货员的岗位职责
2013/11/23 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
学校消防安全制度
2014/01/30 职场文书
揠苗助长教学反思
2014/02/04 职场文书
继承公证书样本
2014/04/04 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
小学元宵节活动总结
2015/02/06 职场文书
贪污检举信范文
2015/03/02 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
教师节主题班会教案
2015/08/17 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang