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 的addEventListener()及attachEvent()区别分析
May 21 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
JavaScript编程中容易出BUG的几点小知识
Jan 31 Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 Javascript
javascript实现倒计时跳转页面
Jan 17 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
原生JS和jQuery操作DOM对比总结
Jan 19 Javascript
原生js实现放大镜特效
Mar 08 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
微信小程序 setData的使用方法详解
Apr 20 Javascript
React.Js添加与删除onScroll事件的方法详解
Nov 03 Javascript
微信小程序实现复选框效果
Dec 28 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 登录记住密码实现思路
2013/05/07 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
js判断是否按下了Shift键的方法
2015/01/27 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
js中的闭包学习心得
2018/02/06 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
跟老齐学Python之Python文档
2014/10/10 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
python 字典操作提取key,value的方法
2019/06/26 Python
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
期末考试动员演讲稿
2014/01/10 职场文书
眼镜促销方案
2014/03/15 职场文书
教师考核评语
2014/04/28 职场文书
医师定期考核实施方案
2014/05/07 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
JavaScript异步操作中串行和并行
2021/11/20 Javascript
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers