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 onkeypress事件入门实例(按下或按住一个键盘按键)
Oct 17 Javascript
JavaScript实现关键字高亮功能
Nov 12 Javascript
纯CSS3代码实现滑动开关效果
Aug 19 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
微信小程序 video组件详解
Oct 25 Javascript
vue组件之间通信方式实例总结【8种方式】
Feb 22 Javascript
vue获取验证码倒计时组件
Aug 26 Javascript
JS实现动态星空背景效果
Nov 01 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
详解vue中v-bind:style效果的自定义指令
Jan 21 Javascript
vue/cli 配置动态代理无需重启服务的方法
May 20 Vue.js
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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
zend framework多模块多布局配置
2011/02/26 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
Python脚本获取操作系统版本信息
2016/12/17 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
python基础梳理(一)(推荐)
2019/04/06 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
python3下pygame如何实现显示中文
2020/01/11 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
优秀毕业生求职推荐信范文
2013/11/21 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
代办委托书怎样写
2014/04/08 职场文书
中央空调节能方案
2014/06/15 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
综合实践活动报告
2015/02/05 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js