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 相关文章推荐
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
JQuery中的$.getJSON 使用说明
Mar 10 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
Mar 03 Javascript
JS实现向表格行添加新单元格的方法
Mar 30 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
基于javascript实现图片滑动效果
May 07 Javascript
Javascript json object 与string 相互转换的简单实现
Sep 27 Javascript
微信小程序之数据双向绑定与数据操作
May 12 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
Jul 05 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
Angular5中提取公共组件之radio list的实例代码
Jul 10 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
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
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
Extjs学习笔记之八 继承和事件基础
2010/01/08 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
vue实现评价星星功能
2020/06/30 Javascript
ssm+vue前后端分离框架整合实现(附源码)
2020/07/08 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
Python Property属性的2种用法
2015/06/21 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
外企C语言笔试题
2013/11/10 面试题
银行实习人员自我鉴定
2013/09/22 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
贺卡寄语大全
2014/04/11 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
骨干教师申报材料
2014/12/17 职场文书
二审答辩状格式
2015/05/22 职场文书
厉行节约工作总结
2015/08/12 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android