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判断是否为ie的方法小结
Jan 13 Javascript
javascript中String对象的slice()方法分析
Dec 20 Javascript
Jquery遍历Json数据的方法
Apr 20 Javascript
JS中Location使用详解
May 12 Javascript
JS中的eval 为什么加括号
Apr 13 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
Jun 07 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
利用JS实现简单的日期选择插件
Jan 23 Javascript
看看“疫苗查询”小程序有温度的代码
Jul 31 Javascript
vue-better-scroll 的使用实例代码详解
Dec 03 Javascript
vue项目刷新当前页面的三种方法
Dec 04 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
在字符串中把网址改成超级链接
2006/10/09 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
详解php中反射的应用
2016/03/15 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
浅析return false的正确使用
2013/11/04 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
使用webpack打包koa2 框架app
2018/02/02 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Python图片的横坐标汉字实例
2019/12/04 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
书香家庭事迹材料
2014/05/09 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
乒乓球比赛通知
2015/04/27 职场文书
教师听课学习心得体会
2016/01/15 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js
Python实现仓库管理系统
2022/05/30 Python