• 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/

  • 相关阅读:
    16日彻底去除安卓应用的内置广告
    配台600元的主机套装 自己组装 全新
    带记录功能的计算器
    华为8812 进入工程模式 和打电话黑屏问题
    买平板 四核 500~600左右对比
    querySelector()方法
    Javascript实例教程:querySelector()方法接受一个CSS查询并返回匹配模式的第一个子孙元素,如果没有匹配的元素则返回null。
    Android实用代码七段(二)
    Android实用代码七段(三)
    Firebug入门指南
  • 原文地址:https://www.cnblogs.com/DTBelieve/p/5349537.html
Copyright © 2020-2023  润新知