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/

  • 相关阅读:
    html css div img垂直居中
    jquery 多选框 checkbox 获取选中的框
    css 滚动条样式
    css 翻牌 翻转 3d翻转 特效
    css强制不换行 多出的字省略号
    jquery获取元素坐标获取鼠标坐标
    鸡汤 咯咯
    <bean> 中配置详解 </bean>
    正则表达式的囧
    我的天$删除注册表$安装mysql最后一步不能启动服务的解决办法
  • 原文地址:https://www.cnblogs.com/DTBelieve/p/5349537.html
Copyright © 2011-2022 走看看