zoukankan      html  css  js  c++  java
  • jq中事件绑定的方法

      在唯品会实习生面试中,被面试官问了这么一个问题,“jQuery中绑定事件的方法有几个?”,以click事件为例,我当时想到的只有.click(),.bind(),.on()这三种,然后面试官又追问,“你知道你所说的这三种有什么区别吗?”,我当时就懵了,实在想不出有什么区别,平时在用的时候并没有想得那么深入,所以回来决定总结一下jQuery中事件绑定的方法,结果发现多另外两种没有见过的方法。。。。。

    还是以click事件为例,jQuery中绑定事件有5种方法:

    (1)target.bind("click",function(){});

    (2)target.click(function(){});

    (3)target.live("click",function(){});

    (4)target.delegate("target_son","click",function(){});

    (5)target.on("click",function(){});

    假设有这么一棵DOM树,我们的目标是给这棵树的div#wrap或者div#wrap的孩子img绑定click事件

     .bind()方法

    .bind( eventType [, eventData ], handler(eventObject) )

    参数:

    • eventType:事件类型
    • evenData:可选,一个对象,它包含的数据键值对映射将被传递给事件处理程序。
    • handler:事件触发执行的函数

    example:

    1 $('div#wrap').bind('click',function(){
    2     alert('div#wrap被点击了');
    3 }})


    .click()

    .click( handler(eventObject) )

    参数:

    • handler(eventObject):事件每次触发时执行的函数

     example:

    1 $('div#wrap').click(function(){
    2     alert('div#wrap被点击了');    
    3 })

    .live()

    .live( events, handler(eventObject) )

    参数:

    • events:一个包含一个JavaScript事件类型的字符串。从jQuery 1.4开始,字符串可以包含多个空格分隔的事件类型或自定义事件的名称。
    • handler:事件触发时执行的函数

    example:

    1 $('div#wrap').live('click',function(){
    2     alert('div#wrap被点击了');
    3 }})

      查看jQuery的api文档,对.live()的描述是这样的,“附加一个事件处理器到匹配目前选择器的所有元素,现在和未来”,也就是说,在调用.live()方法之前,jQuery 会先获取与指定的选择器匹配的元素,而且对于新生的元素只要也是匹配元素,也会绑定事件的。

    .delegate()

    .delegate( selector, eventType, handler(eventObject) )

    参数:

    • selector:选择器字符串,用于过滤器触发事件的元素。
    • eventType:事件类型
    • handler:事件触发时执行的函数

    example:

    1 $('div#wrap').delegate('img', 'click', function() {
    2     alert('div#wrap的孩子img被点击了');    
    3 });

      其实呢,.live()函数和.delegate()函数两者类似,相比.live()函数,.delegate()在执行速度,灵活性和CSS选择器支持方面更加有优势。 

    .on()

     .on( events [, selector ] [, data ], handler(eventObject) )

    参数:

    • events:一个或多个空格分隔的事件类型和可选的命名空间
    • selector:可选,选择器字符串,用于过滤器触发事件的元素。
    • data:当一个事件被触发时,要传递给事件处理函数的数据
    • handler:事件触发时执行的函数

    example:

    1 $('div#wrap').on('click',function(){
    2     alert('div#wrap被点击了');
    3 }})

    总结:

    .click()方法是为特定事件绑定的

    .bind()只能针对已经存在的元素进行事件的设置,但是live(),on(),delegate()均支持未来新添加元素的事件设置

    .live()则是通过冒泡的方式来绑定到元素上的。更适合列表类型的,绑定到document DOM节点上。和.bind()相比有着支持动态数据的优势

    .delegate()则是更精确的小范围绑定事件,性能优于.live()

    .on()性能最佳,推荐使用

      现在回答面试官的问题比较有得说了,下次被问到相同的问题就可以大胆点了~   

     jQuery事件方法可以参考这个网站:http://www.jquery123.com/category/events/

  • 相关阅读:
    正经学C#_循环[do while,while,for]:[c#入门经典]
    Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常
    asp.net core 获取当前请求的url
    在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be
    用orchard core和asp.net core 3.0 快速搭建博客,解决iis 部署https无法登录后台问题
    System.Data.Entity.Core.EntityCommandExecution The data reader is incompatible with the specified
    初探Java设计模式3:行为型模式(策略,观察者等)
    MySQL教程77-CROSS JOIN 交叉连接
    MySQL教程76-HAVING 过滤分组
    MySQL教程75-使用GROUP BY分组查询
  • 原文地址:https://www.cnblogs.com/DTBelieve/p/5349537.html
Copyright © 2011-2022 走看看