找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
  • 网友反映远安桃花岛步道破损隐患,住建部门火速处置,官方留言却遭平台屏蔽引唏嘘

    网友反映远安桃花岛步道破损隐患,住建部门

  • 网曝远安桃花岛上惊现安全隐患,钉子都出来了,周边都是孩子在玩耍

    网曝远安桃花岛上惊现安全隐患,钉子都出来

  • 被网友举报远安北万路上这辆挂人后视镜直接走掉的鄂A本田,罚单来了

    被网友举报远安北万路上这辆挂人后视镜直接

  • 网友举报这辆半挂竟公然在远安泉水冲那里闯红灯,别急,罚单已到位!

    网友举报这辆半挂竟公然在远安泉水冲那里闯

  • 好消息!武陵峡果园杨梅开园啦!老板发福利啦

    好消息!武陵峡果园杨梅开园啦!老板发福利

  • 精装修门面出租:无转让费!周边配套齐全,房东(胡)

    精装修门面出租:无转让费!周边配套齐全,

  • 厕所顶部漏水半年多维权困难 寻求帮助

    厕所顶部漏水半年多维权困难 寻求帮助

  • 远安G347国道上这辆大货车,你的罚单来了

    远安G347国道上这辆大货车,你的罚单来了

  • 紧急提醒:远安县刚刚发布暴雨橙色预警,注意避险防范

    紧急提醒:远安县刚刚发布暴雨橙色预警,注

  • 【招聘保洁熟手】

    【招聘保洁熟手】

  • 襄阳发布警情通报

    襄阳发布警情通报

  • 吐槽一下家门口的清洗街道车😔😔

    吐槽一下家门口的清洗街道车😔😔

  • 险象环生!远安万山弯道五菱神车逆行别车,罚单来了

    险象环生!远安万山弯道五菱神车逆行别车,

  • 突发!刚刚远安这条网红彩虹路边,翻了一辆车

    突发!刚刚远安这条网红彩虹路边,翻了一辆

  • 远安凤凰湾门口路段这位女司机,你的罚单来了

    远安凤凰湾门口路段这位女司机,你的罚单来

  • 【小董有个友好请求🫡】

    【小董有个友好请求🫡】

  • 一串红提,宛如秋日里的一抹亮色...

    一串红提,宛如秋日里的一抹亮色...

  • 远安汽摩协会与远安特校十年相伴,童心同行

    远安汽摩协会与远安特校十年相伴,童心同行

  • 【五月·共勉】

    【五月·共勉】

  • 当阳市公安局玉泉派出所原指导员朱心维接受纪律审查和监察调查

    当阳市公安局玉泉派出所原指导员朱心维接受

  • 远安广坪路段这辆奥迪,你的行为太危险了,你就不怕成了夹心饼干吗

    远安广坪路段这辆奥迪,你的行为太危险了,

  • 在远安洋坪路段违法超车的这辆车,你的罚单刚刚出来了

    在远安洋坪路段违法超车的这辆车,你的罚单

  • 这辆车在远安县解放路与凤德路交汇路口违停,极大交通隐患

    这辆车在远安县解放路与凤德路交汇路口违停

  • 网友反映远安城区这里的行道树上长满了白蚁,观之肉麻!不知道该找谁治

    网友反映远安城区这里的行道树上长满了白蚁

  • 【上午9点把门锁, 小飞侠这是要闹哪出? 】

    【上午9点把门锁, 小飞侠这是要闹哪出? 】

  • 湖北安广陶瓷招聘销售跟单

    湖北安广陶瓷招聘销售跟单

  • 今晚,调油价!

    今晚,调油价!

  • 必须曝光!今天上午,远安嫘祖镇广坪路段这辆婚庆公司的轻卡强行超车肇事逃逸

    必须曝光!今天上午,远安嫘祖镇广坪路段这

  • 坚强的小米辣

    坚强的小米辣

  • 远安人,这个“2026年度综合补贴”是诈骗!

    远安人,这个“2026年度综合补贴”是诈骗!

  • 查看: 10687|回复: 3

    JQuery的Callbacks()函数的应用和技巧(图)

    [复制链接]
    • 打卡等级:无名新人
    • 打卡总天数:1
    • 打卡月天数:0
    • 打卡总奖励:10
    • 最近打卡:2023-06-13 20:58:02
         
    荆楚不肖生 发表于 2018-8-26 19:57 | 显示全部楼层 |阅读模式 来自 中国–湖北–宜昌 电信

    赶紧注册,享受更多功能!查看帖内大图!

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    JQuery的Callbacks()函数的应用和技巧(图)
    一个多用途的回调列表对象,提供了强大的的方式来管理回调函数列表。
    $.Callbacks()的内部提供了jQuery的$.ajax() 和 $.Deferred() 基本功能组件。它可以用来作为类似基础定义的新组件的功能。
    $.Callbacks() 支持的方法,包括 callbacks.add(),callbacks.remove(), callbacks.fire() and callbacks.disable()等
    详细的API见: $.Callbacks API 比如:add | fire | fired | fireWith | has | disable | disabled | empty
    $.Callbacks
    我们通过调用$.Callbacks获取到一个callback实例,如下
    var cb = $.Callbacks();
    1
    当然也可以使用 new 关键字来实例化出这个对象
    var cb = new $.Callbacks();   
    1
    为了尽可能的节省代码和避免混乱我们还是统一采用var cb = $.Callbacks();的方式去调用。
    $.Callbacks(flgs)
    同时,在实例化一个 cb 的时候,还可以传递一些参数,参数类型为一个可以使用空格分隔的字符串。
    支持的 Flags描述:
    这个 flags 参数是$.Callbacks()的一个可选参数, 结构为一个用空格标记分隔的标志可选列表,用来改变回调列表中的行为 (比如. $.Callbacks( ‘unique stopOnFalse’ )).

    JQuery的Callbacks()函数的应用和技巧(图)

    JQuery的Callbacks()函数的应用和技巧(图)
    可用的 flags:
    参数名        描述
    once        确保这个回调列表只执行一次(像一个递延 Deferred).
    memory        当函数队列fire或fireWith一次过后,内部会记录当前fire或fireWith的参数。当下次调用add的时候,会把记录的参数传递给新添加的函数并立即执行这个新添加的函数。
    unique        确保一次只能添加一个回调(所以有没有在列表中的重复).
    stopOnFalse        当一个回调返回false 时中断调用
    默认情况下,回调列表将像事件的回调列表中可以多次触发。
    如何在理想情况下应该使用的flags的例子,见下文:
    实例
    1. Once
    function fn1(val) {console.log(val)};
    function fn2(val) {console.log(val)};
    var callbacks = $.Callbacks( "once" );
    callbacks.add( fn1 );
    callbacks.fire( "foo" );
    callbacks.add( fn2 );
    callbacks.fire( "bar" );
    callbacks.remove( fn2 );
    callbacks.fire( "foobar" );
    /*
    output:
    foo
    */
    2. Memory
    function fn1(val) {console.log(val)};
    function fn2(val) {console.log("fn2 says:" + val)};
    var callbacks = $.Callbacks( "memory" );
    callbacks.add( fn1 );
    callbacks.fire( "foo" );
    callbacks.add( fn2 );//Do immediately of fn2
    //Do fn1 at this time
    callbacks.fire( "bar" );
    callbacks.remove( fn2 );//Do immediately of fn2
    //Do fn1 at this time
    callbacks.fire( "foobar" );
    /*
    output:
    foo
    fn2 says:foo
    bar
    fn2 says:bar
    foobar
    */
    3. Unique
    var callbacks = $.Callbacks( "unique" );
    callbacks.add( fn1 );
    callbacks.fire( "foo" );
    callbacks.add( fn1 ); // repeat addition will not usefull, only one fn1 exist.
    callbacks.add( fn2 );
    callbacks.fire( "bar" );
    callbacks.remove( fn2 );
    callbacks.fire( "foobar" );
    /*
    output:
    foo
    bar
    fn2 says:bar
    foobar
    */
    4. StopOnFalse
    function fn1( value ){
    console.log( value );
    return false;
    }
    function fn2( value ){
    fn1("fn2 says:" + value);
    return false;
    }
    var callbacks = $.Callbacks( "stopOnFalse");
    callbacks.add( fn1 );
    callbacks.fire( "foo" );
    callbacks.add( fn2 );
    callbacks.fire( "bar" );
    callbacks.remove( fn2 );
    callbacks.fire( "foobar" );
    /*
    output:
    foo
    bar
    foobar
    */
    因为$.Callbacks() 支持一个列表的flags而不仅仅是一个,设置几个flags,有一个累积效应,类似“&&”。这意味着它可能结合创建回调名单,unique 和确保如果名单已经触发,将有更多的回调调用最新的触发值 (i.e.$.Callbacks(“unique memory”)).
    function fn1( value ){
    console.log( value );
    return false;
    }
    function fn2( value ){
    fn1("fn2 says:" + value);
    return false;
    }
    var callbacks = $.Callbacks( "unique memory" );
    callbacks.add( fn1 );
    callbacks.fire( "foo" );
    callbacks.add( fn1 ); // repeat addition
    callbacks.add( fn2 );
    callbacks.fire( "bar" );
    callbacks.add( fn2 );
    callbacks.fire( "baz" );
    callbacks.remove( fn2 );
    callbacks.fire( "foobar" );
    /*
    output:
    foo
    fn2 says:foo
    bar
    fn2 says:bar
    baz
    fn2 says:baz
    foobar
    */
    Flag结合体是使用的$.Callbacks()内部的.done() 和 .fail()一个递延容器-它们都使用 $.Callbacks(‘memory once’).
    $.Callbacks 方法也可以被分离, 为方便起见应该有一个需要,定义简写版本:
    var callbacks = $.Callbacks(),
    add = callbacks.add,
    remove = callbacks.remove,
    fire = callbacks.fire;
    add( fn1 );
    fire( "hello world");
    remove( fn1 );
    jQuery:
    jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
    jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。
    jQuery的模块可以分为3部分:入口模块、底层支持模块和功能模块。
    在构造jQuery对象模块中,如果在调用构造函数jQuery()创建jQuery对象时传入了选择器表达式,则会调用选择器Sizzle(一款纯JavaScript实现的CSS选择器引擎,文化苦旅读后感心得体会,用于查找与选择器表达式匹配的元素集合)遍历文档,查找与之匹配的DOM元素,并创建一个包含了这些DOM元素引用的jQuery对象。
    浏览器功能测试模块提供了针对不同浏览器功能和bug的测试结果,其他模块则基于这些测试结果来解决浏览器之间的兼容性问题。
    在底层支持模块中,回调函数列表模块用于增强对回调函数的管理,支持添加、移除、触发、锁定、禁用回调函数等功能;异步队列模块用于解耦异步任务和回调函数,它在回调函数列表的基础上为回调函数增加了状态,并提供了多个回调函数列表,支持传播任意同步或异步回调函数的成功或失败状态;数据缓存模块用于为DOM元素和Javascript对象附加任意类型的数据;队列模块用于管理一组函数,支持函数的入队和出队操作,并确保函数按顺序执行,它基于数据缓存模块实现。
    在功能模块中,事件系统提供了统一的事件绑定、响应、手动触发和移除机制,它并没有将事件直接绑定到DOM元素上,而是基于数据缓存模块来管理事件;Ajax模块允许从服务器上加载数据,而不用刷新页面,它基于异步队列模块来管理和触发回调函数;动画模块用于向网页中添加动画效果,它基于队列模块来管理和执行动画函数;属性操作模块用于对HTML属性和DOM属性进行读取、设置和移除操作;DOM遍历模块用于在DoM树中遍历父元素、子元素和兄弟元素;DOM操作模块用于插入、移除、复制和替换DOM元素;样式操作模块用于获取计算样式或设置内联样式;坐标模块用于读取或设置DOM元素的文档坐标;尺寸模块用于获取DOM元素的高度和宽度。

    百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
    • 打卡等级:即来则安
    • 打卡总天数:28
    • 打卡月天数:0
    • 打卡总奖励:1687
    • 最近打卡:2026-05-27 22:10:38
         
    年轻就是资本 发表于 2018-8-27 13:25 | 显示全部楼层 来自 中国–湖北–宜昌 移动
    百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
    回复

    使用道具 举报

    • 打卡等级:热心大叔
    • 打卡总天数:174
    • 打卡月天数:16
    • 打卡总奖励:7383
    • 最近打卡:2026-06-17 16:14:49
         
    荆山野女 发表于 2018-8-27 16:10 | 显示全部楼层 来自 中国–湖北–宜昌 联通
    百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
    回复

    使用道具 举报

    • 打卡等级:热心大叔
    • 打卡总天数:173
    • 打卡月天数:16
    • 打卡总奖励:7516
    • 最近打卡:2026-06-17 16:16:43
         
    冰凌儿 发表于 2018-8-27 16:11 | 显示全部楼层 来自 中国–广东–潮州 电信
    百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    

    Archiver|手机版|小黑屋|认证|简介|联系我们|赤脚网[临沮网] ( 鄂ICP备18015422号|42052502000021 )

    GMT+8, 2026-6-18 01:36

    Powered by Discuz! X3.5

    © 2001-2026 Discuz! Team.

    网站内容仅代表网友个人观点,非本站认同之观点!删帖请用删帖卡,或在申请版块发帖申请,或联系【 bbs@yalj.net 】我们会尽快处理。
    声明:严禁任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!
    技术管理:远安坤哥    主办单位:远安县临沮网信息管理中心
                       
    快速回复 返回顶部 返回列表