jQuery 事件队列调整方法

 更新时间:2009年09月18日 14:42:17   作者:  
如何为已经绑定A事件的对象添加B事件,由B事件判断A事件是否触发
大家都发现,通过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,是否可以抓的到呢?

相关文章

  • jQuery中end()方法用法实例

    jQuery中end()方法用法实例

    这篇文章主要介绍了jQuery中end()方法用法,实例分析了end()方法的功能、定义与回到最近的一个"破坏性"操作之前的使用技巧,需要的朋友可以参考下
    2015-01-01
  • jQuery each函数源码分析

    jQuery each函数源码分析

    jquery each函数的使用频率非常高,下面给大家介绍jQuery each函数源码分析,一起看看吧
    2016-05-05
  • NiftyCube——轻松实现圆角边框

    NiftyCube——轻松实现圆角边框

    这篇文章主要介绍了NiftyCube——轻松实现圆角边框
    2007-02-02
  • Jquery中增加参数与Json转换代码

    Jquery中增加参数与Json转换代码

    有时候,我们需要进一步转化为json表达式,参考Ext中的Ext.urlDecode函数,我们可以实现一个相应的jquery中使用的函数。
    2009-11-11
  • easyui取消表单实时验证,提交时统一验证的简单实例

    easyui取消表单实时验证,提交时统一验证的简单实例

    下面小编就为大家带来一篇easyui取消表单实时验证,提交时统一验证的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 使用jQuery实现图片遮罩半透明坠落遮挡

    使用jQuery实现图片遮罩半透明坠落遮挡

    这篇文章主要介绍了使用jQuery实现图片遮罩半透明坠落遮挡,效果非常棒,小伙伴们做相册的时候可以直接拿走使用。
    2015-03-03
  • Jquery倒计时源码分享

    Jquery倒计时源码分享

    这是一个基于jquey写的倒计时。当然代码有点小改动,只是改了一下展示效果。
    2014-05-05
  • 教你一步步用jQyery实现轮播器

    教你一步步用jQyery实现轮播器

    相信大家应该都会看到在各大网站上都有一个轮播器的效果,于是自己不禁也想做一个,查了资料,看了轮播器的原理,慢慢的试着做了做,最终效果勉勉强强,但还是想总结出来,或许对有需要的朋友们带来一定的帮助,下面来一起看看吧。
    2016-12-12
  • 使用jquery提交form表单并自定义action的实现代码

    使用jquery提交form表单并自定义action的实现代码

    下面小编就为大家带来一篇使用jquery提交form表单并自定义action的实现代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 关于html+ashx开发中几个问题的解决方法

    关于html+ashx开发中几个问题的解决方法

    在跟html+ashx打交道的园友们肯定会发现,这种模式虽然优美,但在开发中会遇到一些难处理的地方。我也不例外,下面是自己在实际开发中总结出来的几条经验,希望跟大家分享,更希望得到大家的建议和更好的解决方法!
    2011-07-07

最新评论