a...">
美文网首页
JQuery事件处理

JQuery事件处理

作者: 向上而活 | 来源:发表于2019-05-26 18:36 被阅读0次

    jQuery有几种绑定事件处理函数的方法,有什么区别:

    第一种:

    $(...).bind("事件名",fn)->addEventListener

    特点: 为同一个元素的事件处理函数绑定多个函数对象

    $(...).unbind("事件名",fn)->removeEventListener

    强调: 如果有可能移除事件处理函数,则绑定时,必须用有名的函数绑定,不能用匿名函数。
    重载1: 不带任何参数: 移除元素上所有事件处理函数绑定
    重载2: 只带一个事件名称参数: 移除元素上指定事件名称绑定的所有函数对象
    重载3: 带两个参数: 仅移除事件元素上指定事件名称绑定的执行的一个函数对象。

    问题: 只能为页面上现有的元素绑定事件,动态新添加的元素无法自动绑定事件处理函数
    解决: delegate

    第二种:

    事件代理: 让指定父元素下,所有符合要求的子元素,都能使用事件处理函数。(包括已有的元素和新生成的元素)

    原理: 利用冒泡:
    1. 仅将事件处理函数绑定在父元素上一次
    2. 获得目标元素: e.target
    3. 仅响应符合条件的元素的事件

      优: 减少事件监听的个数, 可让后生成的新元素自动响应事件
      何时: 只要希望一个父元素下指定的所有子元素都能响应事件时
    
      如何使用:
     $(parent).delegate("selector","事件名",fn)
     将事件绑定到parent上(利用冒泡),只有符合selector条件的元素才能响应事件,其中: fn: function(e){e.target//获得目标元素}
    
       $(parent).undelegate("selector","事件名",fn)
    

    delegate vs bind

    1. 优化: 创建事件监听对象的个数
      delegate: 仅在父元素创建一个事件监听,所有子元素公用
      bind: 为每个子元素分别创建事件监听
    2. 效果:
      delegate: 新生成的子元素也可自动共享父元素的事件
      bind: 新生成的子元素无法自动获得事件处理函数
    3. 一次性事件: $(...).one("事件名",fn)
      只能执行一次事件处理函数,执行后,自动解除绑定
    4. (...).live("事件名",fn), 本质:同delegate 问题: 极端,将所有元素的所有事件集中绑定到document(...).die("事件名",fn), 本质:同undelegate
    5. 终极简化:
      问题: 仅为一个元素绑定事件处理函数: bind
      利用冒泡: delegate
      解决: 统一成了on
      1. 仅为一个元素绑定事件处理函数:
        $("target").on("事件名",fn)
      2. 利用冒泡:
        $("parent").on("事件名","selector",fn)
        解除绑定: off(...)
    6. 简写: $(...).事件名(function(){...})
      问题: 仅少量常用的事件,可简写,如果遇到无法简写的事件,就要用on

    其他

    模式触发事件:触发被选元素的指定事件类型。

    DOM: elem.onxxx();
        问题: 只能触发直接用onxxx绑定的事件处理函数,用addEventListener添加的事件监听,无法模拟触发
    jq: $(...).trigger("事件名")
       其实可简写为: $(...).事件名
    

    页面加载后执行

    特殊: $(document).ready(function(){...})
    

    鄙视题:
    vs DOM: window.onload=function(){...}

        ready的底层事件是 DOM中的ondocumentcontentloaded,只要DOM树加载完成,js执行完毕就会触发。 而onload: 必须等到html,css,js,img全部加载完成才触发。
    
    优化: 可将原来在load之后才执行的任务(事件绑定,修改DOM树),提前到ready之后执行,可缩短页面整体加载时间。
    
       如何使用: $(document).ready(function(){...})
                 简: $().ready(function(){...})
                 更简: $(function(){...});
    
     其实: 只要将script放在body的结尾,就可实现DOM加载后立刻执行。
    

    hover

     一个事件hover, 其实就是mouseover和mouseout的合体,所以,hover要绑定两个事件处理函数
    

    何时使用: 只要同时响应mouseover和mouseout时,就可简写为hover

    相关文章

      网友评论

          本文标题:JQuery事件处理

          本文链接:https://www.haomeiwen.com/subject/umyftctx.html