对于jQuery自定义事件,很多JavaScript开发者都会有所疑惑:在日常开发过程中会不会用到呢?而本文将结合一个开发案例,其中的一些地方应用到了jQuery的自定义事件,而且达到了很好的效果-精简代码的同时充分利用了OO的原则。

51CTO推荐专题: jQuery从入门到精通

问题

一个复选框X,你如何便捷地触发它的click事件的处理逻辑,但是又不改变它当前的选中状态?

答案

其实没有什么标准答案,用传统的方式,写一个函数:


  1. var onClick=function(dom){//复选框x的Click事件的处理逻辑};

当仅仅需要执行处理逻辑而不改变复选框的状态时:


  1. onClick(X);//X引用复选框

为了响应用户直接点击复选框,你还需要为复选框X添加相应的Click处理函数:


  1. $(X).click(function(evt){  //执行处理逻辑  onClick(this);});

但是,我要说的是,这里可以利用自定义事件处理函数封装复选框Click事件的处理逻辑!然后触发该自定义事件。而且个人觉得具有必要性和优点:

1,onClick的逻辑是属于复选框自身的,没有必要用一个全局方法来定义并剥离复选框对象。

从面向对象的角度说,对象由属性和行为(方法)构成,所以onClick的逻辑可以封装在复选框的作用域(context)内。

2,充分利用匿名函数,减少全局变量或者函数的数量,有利于提高脚本的执行效率。

代码示例

1,首先定义一个变量$x引用缓存我们的复选框对象。这点非常重要但很多js开发员没有意识到:每调用一次jQuery的$方法选中某个元素=遍历一次html dom树。所以要学会利用JavaScript变量缓存对象。


  1. var $x=$(X);

2,定义一个自定义事件evtClick,封装处理逻辑。


  1. $x.bind("evtClick",function(evt){    //onClick的处理逻辑});

3,当要执行处理逻辑又不想改变复选框的选中状态时,利用trigger方法触发evtClick事件。


  1. $x.trigger("evtClick");

4,click事件。


  1. $x.click(function(evt){  $x.trigger("evtClick");});

jQuery触发自定义事件并传参


  1. $("input").bind("myevent",function(event,msg1,msg2){
  2. alert("msg1:"+msg1);
  3. })
  4. $("input").click(function(){
  5. $("input").trigger("myevent",["avalue","bvalue"])
  6. });
  7. $("input").bind("myevent",function(event,msg1,msg2){
  8. alert("msg1:"+msg1);
  9. })
  10. $("input").click(function(){
  11. $("input").trigger("myevent",["avalue","bvalue"])
  12. });

自定义事件:


  1. var Common = {};
  2. Common.Dialog = function(config){};
  3. Common.Dialog.prototype = {
  4. height:310,
  5. init: function(){
  6. jQuery.event.trigger("submit");
  7. }
  8. };
  9. var dlg = new Common.Dialog({height:200});
  10. $(dlg).bind("submit",function(){alert("submit event")});
  11. dlg.init();

Jquery精妙的自定义事件的更多相关文章

  1. jQuery 自定义事件的学习笔记

    jquery中提供了两种方法可以绑定自定义事件: bind()和one()而绑定的自定义事件的触发,必须得用jquery中的trigger()方法才能触发. 我们先来看on事件  代码如下 复制代码 ...

  2. jquery的自定义事件通过on绑定trigger触发

    jquery绑定自定义事件,可以实现预先绑定好一个处理方法,当需要使用的时候利用jquery trigger来触发自定义事件,以达到方便快捷的目的.我们来假设一个这样的场景,一个textarea中的字 ...

  3. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  4. 跟着《beginning jquery》学写slider插件并借助自定义事件改进它

    <beginning jquery>是一本很不错的学习jquery的书,作者的讲解深入浅出,很适合初学者,在最后一章里面,作者把前面所有的点结合起来完成了一个轮播图的jquery插件.实现 ...

  5. jQuery的自定义事件——滚轮

    这个案例类似于在地图上滚动滚轮,能缩小或者放大地图,分别用zoomIn和zoomOut来命名. 代码如下: //JS部分:<script src="jquery-1.10.2.min. ...

  6. jQuery 的自定义事件

    jQuery  中,想要自动触发自定义事件,必须满足2个条件: 1.事件必须是通过on 来绑定的. 2.事件必须是通过trigger / triggerHandler 来触发. 格式如下: $(fun ...

  7. jQuery on() 方法 为选定已存在元素和未来元素绑定标准事件和自定义事件

    很有必要说说jQuery的on方法,这个方法存在大乾坤大奥秘,主要注意两点: 1.为已存在元素和未来元素(动态添加元素)绑定处理函数. 2.自定义一个非标准的事件并绑定处理函数. 定义和用法 on() ...

  8. jQuery 学习笔记(5)(事件绑定与解绑、事件冒泡与事件默认行为、事件的自动触发、自定义事件、事件命名空间、事件委托、移入移出事件)

    1.事件绑定: .eventName(fn) //编码效率略高,但部分事件jQuery没有实现 .on(eventName, fn) //编码效率略低,所有事件均可以添加 注意点:可以同时添加多个相同 ...

  9. jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化

    jQuery封装自定义事件--valuechange(动态的监听input,textarea)之前值,之后值的变化 js监听输入框值的即时变化 网上有很多关于 onpropertychange.oni ...

随机推荐

  1. 使用串口下载vxworks映象的方法

    使用串口下载vxworks映象的方法 由于坛子里这方面的可行性文章比较少,不时有一些网友在询问这方面的问题,再加上通过这种方法可以调试网络驱动,所以我花了一点时间把整个下载过程试了一下. 1.配置co ...

  2. weblogic部署web项目出现错误

    1.错误描述 <2015-3-15 下午02时13分01秒 CST> <Info> <Security> <BEA-090905> <Disabl ...

  3. BFS POJ2251 Dungeon Master

    B - Dungeon Master Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  4. hdu5923 Prediction

    jxt的思路 先膜一发 先处理 T这棵树上每个点到祖先这条链的点所生成的并查集 每个点的并查集都得分开来存 这个dfs做就好了 最后询问的时候 将k 个点的并查集合并就是这个询问的连通图 易得答案 # ...

  5. var dataObj=eval("("+data+")");//转换为json对象(解决在ajax返回json格式数据的时候明明正确的获取了返回值但是却就是进不去success方法的问题。格式错误)

    一,原理 1.1,解析1 将字符串解析为JavaScript代码,比如:var a = "alert('a');";这里的a就只是一个字符串而已,输出的话也是alert(a);这句 ...

  6. 【HNOI2012】永无乡(splay,启发式合并)

    题解 Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过 ...

  7. 【BZOJ3529】【SDOI2014】数表

    Time Limit: 1000 ms Memory Limit: 512 MB Description 有一张n×m的数表,其第i行第j列 (1≤i≤n,1≤j≤m)的数值为能同时整除i和j的所有自 ...

  8. PORTE_ISFR & (1<<n)

    位运算关键:空出补零,溢出舍弃

  9. Lintcode245 Subtree solution 题解

    [题目描述] You have two every large binary trees:T1, with millions of nodes, and T2, with hundreds of no ...

  10. Firefox配置文件夹详解

    参考此文会帮助你更好的管理和备份Firefox配置文件,此文没有列出的文件大多是Firefox运行时生成的一些随机文件,大多无用,备份或管理配置文件时酌情删除. 在地址栏输入about:support ...