jQuery 事件队列调整方法
2009-09-18 00:00
671 查看
大家都发现,通过jQuery绑定事件是件非常容易的事情
但是A事件绑定后,我发现我需要B事件来决定其是否触发,好办,现在就改。
真的能够阻止后面的click事件触发吗?事与愿违。
如果B事件需要通过异步调用来判断A事件是否需要触发呢?
事实发现根本不可能,那怎么办呢?
先说几种思路:
将后绑定的事件通过另外一种触发,比如A事件是绑定在click上,那么B事件绑定在mouseover上,先触发mouseover再通过它来阻止click事件。(后来经过研究,发现这几乎是不可能的事情)
将2个事件通过jquery的queue进行处理。(这个确实可以解决先后触发的问题,但是现实的情况是项目中所有的事件绑定已经全部写好,目前需要每个按钮事件前都加上1个判断的AJAX请求。要不就是所有的按钮事件全部重写,要么另外寻找一条路)
深入jQuery的事件机制,获得其事件的队列,针对其事件队列进行处理。
问题貌似圆满解决,但是AJAX的callback函数中的return,是否可以抓的到呢?
<TEXTAREA class=javascript name=code rows=15 cols=50>$("a").click(function(){ console.info("A"); return false; }); </TEXTAREA>
但是A事件绑定后,我发现我需要B事件来决定其是否触发,好办,现在就改。
<TEXTAREA class=javascript name=code rows=15 cols=50>$("a").click(function(){ console.info("B"); return false; }); $("a").click(function(){ console.info("A"); return false; }); </TEXTAREA>
真的能够阻止后面的click事件触发吗?事与愿违。
如果B事件需要通过异步调用来判断A事件是否需要触发呢?
<TEXTAREA class=javascript name=code rows=15 cols=50>$("a").click(function(){ $.ajax({ url:"b.html", success:function(msg){ if(msg){ console.info("pass"); return true; }else{ console.info("nopass"); return false; } } }); }); $("a").click(function(){ console.info("B"); return false; }); </TEXTAREA>
事实发现根本不可能,那怎么办呢?
先说几种思路:
将后绑定的事件通过另外一种触发,比如A事件是绑定在click上,那么B事件绑定在mouseover上,先触发mouseover再通过它来阻止click事件。(后来经过研究,发现这几乎是不可能的事情)
将2个事件通过jquery的queue进行处理。(这个确实可以解决先后触发的问题,但是现实的情况是项目中所有的事件绑定已经全部写好,目前需要每个按钮事件前都加上1个判断的AJAX请求。要不就是所有的按钮事件全部重写,要么另外寻找一条路)
深入jQuery的事件机制,获得其事件的队列,针对其事件队列进行处理。
<TEXTAREA class=javascript name=code rows=15 cols=50>//我们先让其默认绑定个事件,称其为A事件 $("a").click(function(){ console.info(1); return false; }); //现在我们要让后面绑定的B事件先触发,并且控制A事件是否触发 //获取对象a绑定的事件对象中的click事件 var event = $("a").data("events").click; //因为这个a在我们的B事件中也需要用到,为了防止this对象的改变,因此特地声明变量that保存 var that = $("a"); //下面就是B事件了,但是貌似好像没有绑定啊 var B = function(){ $.ajax({ url:"b.html", success:function(msg){ if(msg){ console.info("pass"); tt.call(that); }else{ console.info("nopass"); } } }); return false; }; //关键对象,尽请对其多关注 var tt; //关键代码,尽请多关注 for(var i in event){ tt = event[i]; event[i] = B;//如果注释此行,下面2行必须取消注释。效果一样,原理不同... //delete(event[i]); //that.click(B); break; } </TEXTAREA>
问题貌似圆满解决,但是AJAX的callback函数中的return,是否可以抓的到呢?
相关文章推荐
- jQuery 事件队列调整方法
- jQuery中,把新添加的事件Event,添加到队列的第一个位置,调整执行顺序
- 如何调整jQuery中的事件队列
- jQuery 事件方法
- jQuery中的bind绑定事件与文本框改变事件的临时解决方法
- 用事件队列解决GUI的操作顺序问题(Qt中处理方法)
- 学习JQuery的$.Ready()与OnLoad - $(window).load() 方法事件比较
- Jquery的resize方法,即元素大小改变事件
- 如何解决asp.net 在vs2010(.net framework 4.0)中listview控件用jquery,javascript为模版中的服务端控件注入事件的方法?因为vs2010在这个方面有存在的bug!
- jquery 键盘事件的使用方法详解
- jQuery 事件 - click() 方法
- jQuery实现按钮只点击一次后就取消点击事件绑定的方法
- jQuery 事件 - trigger() 方法
- jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
- jQuery绑定事件之live()、bind()方法介绍
- 关于标签onclick方法失效,或jquery绑定事件失效的问题
- jQuery--事件方法
- JQuery事件e参数的方法preventDefault()取消默认行为
- jQuery 查找on事件绑定元素的被绑定元素方法
- jQuery 事件 - blur() 方法