web前端面试题@六(事件委托)

*说到事件委托,我们首先先要知道什么是事件委托——

     · 那么什么是事件委托呢???  

        JS里的事件委托就是当事件触发时,把要做的事委托给父元素(上级、上上级......)来处理。当需要添加的事件过多时,可以使用事件委托,而事件委托实际上利用了事件冒泡的特性。

     · 那可能会问了,什么是事件冒泡呢??

       简单的来说,当我们点击子元素,触发的时事件会传递给父元素,这就是事件冒泡。

     · 为什么要用事件委托呢?好处是啥?

            咱先说说好处是啥:

       因为在JavaScript中,每个函数都是对象,对象越多,占用的内存也就越多,合理使用事件委托可以减少内存的占用。所以事件委托的好处就是在内存中开辟了一块空间,节省资源同时减少了dom操作,提高性能,而且js新生成的子元素也不用新为其添加事件了,程序逻辑上比较方便

            那为啥要用时间委托呢?

    因为,每个事件处理函数都是对象,对象会占用内存,内存中的对象越多,性能就越差。

    此外,必须事先指定所有的事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。

       · 好处说了,说说问题吧~

         兼容,一个好的项目,首先要考虑的就是兼容问题,事件委托存在兼容性问题是,在老的IE下,事件源是 window.event.srcElement,其他浏览器是 event.target,所以在做兼容的时候  参数 = event.target || window.event 需要加上这一步。完美解决~

       关于 Jquery事件委托在IOS系统会失效!?

        将事件委托给了document元素,具体绑定情况如下:

        $(document).on('click', ".btn", function(){})

        PC端测试和安卓测试都正常,但是在IOS端缺失效了!根据H5新定义,默认可点击的元素有a标签和button标签,也就是给这两种标签进行事件委托是完全没有问题的。

        解决办法:

        给.btn加一个样式: cursor: pointer;

        按照规定, 点击元素使用button或者a标签

        把document换成.btn的父元素,前提是父元素不是跟随.btn一起动态添加进来的

        然后给一个比较简单的问题,父级那么多子元素,怎么区分事件本应该是哪个子元素的?

        区分方法就是event对象里记录的有“事件源”,它就是发生事件的子元素。



赠品:

事件捕获和事件冒泡机制

事件捕获

当一个事件触发后,从Window对象触发,不断经过下级节点,直到目标节点。在事件到达目标节点之前的过程就是捕获阶段。所有经过的节点,都会触发对应的事件

事件冒泡

当事件到达目标节点后,会沿着捕获阶段的路线原路返回。同样,所有经过的节点,都会触发对应的事件

DOM事件流模型

    总共三阶段

        在DOM兼容浏览器中,事件流分为3个阶段:

        (1)捕获阶段:事件从Document节点自上而下向目标节点传播的阶段;

        (2)目标阶段:真正的目标节点正在处理事件的阶段;

        (3)冒泡阶段:事件从目标节点自上而下向Document节点传播的阶段。 [3]

    独特性质

            DOM事件流最独特的性质是,文本节点也触发事件(在IE中不会),当鼠标单击“单击此文本”文本时会触发click事件,该事件的捕获阶段最先开始,从Document节点开始逐渐向下传播,直到“单击此文本”文本节点,事件进入目标阶段,在目标阶段结束之后,事件由“单击此文本”文本节点开始事件的冒泡阶段,直到Document节点为止。 

            另外,需要说明的是,有些事件是可以取消的,在整个事件流的任何位置通过调用事件的stopPropagation方法可以停止事件的传播过程。 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,916评论 1 11
  • JavaScript 与 HTML 之间的交互是通过事件实现的。事件,就是文档或浏览器窗口中发生的一些特定的交互瞬...
    LemonnYan阅读 3,961评论 0 4
  • js之事件机制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驱动...
    道无虚阅读 7,286评论 0 2
  • 一、事件流 1.1 事件流 事件流:从页面中接受事件的顺序 事件冒泡:即事件开始时由最具体的元素(文档中嵌套层次最...
    范小饭_阅读 4,750评论 1 9
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,722评论 0 21

友情链接更多精彩内容