【 tulaoshi.com - Web开发 】
                             
                            大家都发现,通过jQuery绑定事件是件非常容易的事情 
 代码如下:
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,是否可以抓的到呢?