大家都发现,通过jQuery绑定事件是件非常容易的事情
$("a").click(function(){ console.info("A"); return false; });
但是A事件绑定后,我发现我需要B事件来决定其是否触发,好办,现在就改。
$("a").click(function(){ console.info("B"); return false; }); $("a").click(function(){ console.info("A"); return false; });
真的能够阻止后面的click事件触发吗?事与愿违。
如果B事件需要通过异步调用来判断A事件是否需要触发呢?
$("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; });
事实发现根本不可能,那怎么办呢?
先说几种思路:
//我们先让其默认绑定个事件,称其为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; }
问题貌似圆满解决,但是AJAX的callback函数中的return,是否可以抓的到呢?
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛