位置: 编程技术 - 正文

jQuery 1.9.1源码分析系列(十)事件系统之绑定事件(jquery animate源码)

编辑:rootadmin

推荐整理分享jQuery 1.9.1源码分析系列(十)事件系统之绑定事件(jquery animate源码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery源码实现原理,jquery源码是什么水平,jquery源码实现原理,jquery animate源码,jquery.min.js源代码,jquery源码是什么水平,jquery.min.js源代码,jquery源码实现原理,内容如对您有帮助,希望把文章链接给更多的朋友!

事件绑定的方法有很多种,使用了jquery那么原理那种绑定方式(elem.click = function(){...}))就不太想推荐给大家了。最主要的原因是elem.click=fn这种方式只能绑定一个事件处理,多次绑定的只会保留最后一次绑定的结果。

下面给大家介绍jquery绑定事件的方式有哪些吧。

比如eventType指的是事件类型,比如click: $("#chua").click(fn);

data这个参数一般都不会使用。这种方式事件绑定在("#chua")上,没有委托事件,和js原生的事件绑定更接近。我们看一下源码

  比如$("#chua").bind("click",fn)。直接将事件绑定到$("#chua")上,没有委托事件。源码

  顾名思义delegate这个函数是用来做事件委托的,将选择器selector对应的响应处理委托给当前jQuery所匹配的元素。

  比如:$(document).delegate('#big',"click",dohander);分析到这里顺便分析一下事件委托的处理流程。

  当点击"#big"元素的时候,事件click会冒泡直到document节点;

  document绑定了处理事件,这个处理事件会调用到事件分发器dispatch;

  dispatch中取出对应事件类型click的所有的委托事件列表handlers;

  根据事件源event.target过滤出委托事件列表handlers中每一个元素的selector属性对应的节点处于事件原和委托节点document之间(包括事件源)的委托事件,保存为handlerQueue;

  执行handlerQueue里面的事件处理。

  上面是一个大致的流程,后续会详细分析。先看delegate源码

  通过one()函数绑定的事件处理函数都是一次性的,只有首次触发事件时会执行该事件处理函数。触发之后,jQuery就会移除当前事件绑定。

  比如$("#chua").one("click",fn);为#chua节点绑定一次性的click事件

  $(document).one("click","#chua",fn);将#chua的click事件委托给document处理。源码

  trigger触发jQuery对象所匹配的每一个元素对应type类型的事件。比如$("#chua").trigger("click");

  triggeHandler只触发jQuery对象所匹配的元素中的第一个元素对应的type类型的事件,且不会触发事件的默认行为。

jQuery 1.9.1源码分析系列(十)事件系统之绑定事件(jquery animate源码)

  上面分析了那么些个事件绑定,有么有发现他们都是使用.on方式绑定的?这也是为什么提倡统一使用on来绑定的原因(one方式除外)。

  .on的事件绑定一半的代码都实在处理传递不同参数的处理,这也是jQuery的口号Write less, do more的代价吧。最终使用jQuery.event.add来绑定事件。

  jQuery.event.add绑定事件有几个比较关键的地方:

  第一个,使用内部缓存来保存节点elem的事件信息

  第二个,设置绑定事件信息,特别是指定的选择器selector、响应处理handler、响应事件类型type、命名空间namespace

  第三个,节点的事件列表中,真正的委托事件列表放置在前面,和delegateCount属性同步,即events.click.length假设为3,events.click.delegateCount假设为2。那么events.click[0]和events.click[1]所指定事件是委托事件。第三个events.click[2]对应的事件不是委托事件,而是节点自身的事件。

  源码和添加事件后的结构上一章已经分析,详情请点击查看

  绑定有一个公用函数jQuery.fn.on。解绑同样有一个公用函数jQuery.fn.off

  这里的传参有个比较特殊的情况:当types是浏览器事件对象event的时候,表示要去掉(解绑)委托节点上event.selector指定的委托事件

  无论如何最终都是调用jQuery.event.remove函数来解绑事件。

  jQuery.fn.off完整的源码如下

  接下来分析一下事件解绑的低级api jQuery.event.remove。

jQuery.event.remove

  jQuery使用.off()函数伤处绑定的事件时内部调用的基础函数是jQuery.event.remove。该函数的处理流程如下

  1. 分解传入的要删除的事件类型types,遍历类型,如果要删除的事件没有事件名,只有命名空间则表示删除该命名空间下所有绑定事件

  2. 遍历类型过程中,删除匹配的事件,代理计数修正

  3. 如果节点上指定类型的事件处理器已经为空,则将events上的该类型的事件处理对象移除

  4. 如果节点上没有任何绑定的事件,则清空事件处理入口handle

拓展: 浏览器事件删除jQuery.removeEvent

以上内容是小编给大家介绍的jQuery 1.9.1源码分析系列(十)事件系统之绑定事件,希望大家喜欢。

jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构 又是一个重磅功能点。在分析源码之前分析一下体系结构,有助于源码理解。实际上在jQuery出现之前,DeanEdwards的跨浏览器AddEvent()设计做的已经比较优

jquery实现表格隔行换色效果 本文实例讲述了jquery实现表格隔行换色效果的代码。分享给大家供大家参考。具体如下:运行效果截图如下:具体代码如下:1、新建一个web项目,jQuery

jquery通过扩展select控件实现支持enter或focus选择的方法 本文实例讲述了jquery通过扩展select控件实现支持enter或focus选择的方法。分享给大家供大家参考,具体如下:/****************************************@authorjdkleo*@da

标签: jquery animate源码

本文链接地址:https://www.jiuchutong.com/biancheng/370541.html 转载请保留说明!

上一篇:基于Jquery代码实现手风琴菜单(使用jquery实现的项目)

下一篇:jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构(jquery fadein 源码)

  • 计税工资和实发工资不一样所得税
  • 个人独资公司对外如何承担责任
  • 自然人独资公司和个人独资企业区别
  • 普票丢失了能作废重开吗
  • 人力资源服务费发票可以抵扣吗
  • 待认证转进项税额转出会计分录
  • 税控机减免税额怎么算
  • 个人经营所得核定征收超过多少要交税
  • 房屋租赁发票能抵扣几个点
  • 无形资产评估增值
  • 建筑行业劳务费开发票可以开工程款吗?
  • 个体工商户税收怎么算
  • 免税更正申报
  • 母子公司可以汇资金吗
  • 印花税减半征收会计分录怎么做
  • 工商年报报表
  • 金融企业贷款利息收入确认
  • 生产企业的免抵退纳税申报,在财务做销售收入账务后
  • 分期收款销售的商品属于存货吗
  • linux系统 推荐
  • 鸿蒙负一屏怎么设置
  • 快递公司账务处理流程及方法
  • 一个集团的分公司干过活再去另一个分公司会被发现吗
  • 国税的个税手续怎么办理
  • windows10一直刷屏
  • winrar压缩后生成的文件格式
  • 社保挂靠会计处理
  • PHP:session_commit()的用法_Session函数
  • sguard是什么
  • sgmain.exe - sgmain是什么进程 有何作用
  • 无偿划转股权
  • 进项逾期未认证怎么办
  • 发票开错需要让客户寄回来吗
  • 不良品扣款应入哪个科目
  • 怎么查询开具的红字发票
  • 企业印花税的申报
  • 公司对其他公司的投资怎么做账
  • 开发支出在资产负债表填哪一栏
  • 非应税项目是有哪些项目
  • MySQL读写分离企业方案
  • 货物退回并补货什么意思
  • 股权投资所得是什么
  • 内账应收应付怎么对账
  • 职工薪酬纳税调整明细表税收金额
  • 核算产品的成本的表
  • 公司开业前期费用谁出
  • 会计科目漏记怎么补记
  • 存根联明细怎么申报
  • 营改增涉及哪些项目
  • 企业各种盘盈和盘亏分录
  • 简易征收能抵扣进项税吗
  • 工程未完工开了发票怎么做账
  • mysql 5.7.18 winx64密码修改
  • ubuntu xenial
  • ubuntu ftp服务开启
  • win8更新8.1
  • centos文件权限详解
  • Centos 5.5 php5.1.2升级到php5.2.6的方法
  • ramaint.exe - ramaint是什么进程 有什么用
  • centos支持中文
  • 安装linux系统步骤图解
  • w7提高开机速度
  • 如何让win8系统变快
  • unity制作ar手机游戏
  • opengl csdn
  • jquery 使用
  • 深入理解linux系统
  • 构造函数中super()的作用
  • js的继承方式
  • javascript中获取字符串长度
  • js实现商品分类
  • Unity3D游戏开发毕业论文
  • python语言的特殊符号
  • javascript要学到什么程度
  • 办理税务迁移的流程
  • 北京市社会团体
  • 广东省地方税务局历任局长
  • 厦门市地方税务局市稽查局关于规范稽查有关规定
  • 免征船舶吨税的范围
  • 如何在国税网下载发票
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设