在唯品会实习生面试中,被面试官问了这么一个问题,“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:

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

.click()

.click( handler(eventObject) )

参数:

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

example:

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

.live()

.live( events, handler(eventObject) )

参数:

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

example:

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

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

.delegate()

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

参数:

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

example:

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

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

.on()

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

参数:

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

example:

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

总结:

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

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

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

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

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

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

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

jq中事件绑定的方法的更多相关文章

  1. JavaScript中事件绑定的方法总结

    最近收集了一些关于JavaScript绑定事件的方法,汇总了一下,不全面,但是,希望便于以后自己查看. JavaScript中绑定事件的方法主要有三种: 1 在DOM元素中直接绑定 2 JavaScr ...

  2. DOM中事件绑定补充方法

    先将上一篇文章中提到的为元素增加事件的方法和移除事件的方法拿过来: <span style="font-size:18px;">//跨浏览器添加事件 function ...

  3. onload事件属性,JQ中的load,ready方法

    onload事件属性,JQ中的load,ready方法 前言 页面中的很多操作,需要我们在所需资源下载完成后,才可以进行操作,而资源没有及时下载,我们进行操作的话,是会报错.因此我们需要熟练掌握哪些事 ...

  4. JS中事件绑定的三种方式

    以下是搜集的在JS中事件绑定的三种方式.   1. HTML onclick attribute     <button type="button" id="upl ...

  5. JavaScript 中事件绑定的三种方式

    以下是在 JS 中事件绑定的三种方式.   1. HTML onclick attribute     <button type="button" id="uplo ...

  6. js中事件绑定要注意的事项之如何在方法中自己打印自己的值

    下面是错误的js方法绑定,这样写会造成在方法中不能用 调用方法的dom本身的一些 东西,如各种属性或者jq对象等. <!DOCTYPE html> <html> <hea ...

  7. jQuery中事件绑定到bind、live、delegate、on方法的探究

    1. 给页面上的某个元素绑定事件,最初采用下面的方式实现: $(‘selector’).click(function(){ //code }); 缺点: 不能同时绑定多个事件,不能绑定动态的元素. 后 ...

  8. jQuery的三种bind/One/Live/On事件绑定使用方法

    本篇文章介绍了,关于jQuery新的事件绑定机制on()的使用技巧.需要的朋友参考下   今天浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQ ...

  9. [js高手之路] vue系列教程 - vue的事件绑定与方法(2)

    一.在vue中,绑定事件,用v-on:事件类型, 如绑定一个点击事件, 我们可以这样子做 window.onload = function () { var c = new Vue({ el : 'b ...

随机推荐

  1. go语言实战教程之 后台管理页面统计功能开发(1)

    本节内容我们将学习开发实现后台管理平台页面统计功能开发的功能接口,本章节内容将涉及到多种请求路由的方式. 功能介绍 后台管理平台不仅是功能管理平台,同时还是数据管理平台.从数据管理平台角度来说,在管理 ...

  2. 编译 ambari 2.7.3

    官方给的教程比较简单,需要事先安装的工具也是这里列一点,那里列一点.在此记录一下编译要点(在 centos 7 下). 1. 事先需要安装的工具 yum install -y git svn node ...

  3. 智能合约安全事故回顾(3)-DOS漏洞导致的KotET事件

    现实世界中的网络都是有带宽限制的,想象一下,一个访问量稳定的网站,突然有人利用某种方式爆发式的将网站的访问量提升,这个时候系统会作何反应?如果系统没有合理的防DOS攻击的方式,这种时候往往会造成服务器 ...

  4. SP839 Optimal marks(最小割)

    SP839 Optimal marks(最小割) 给你一个无向图G(V,E). 每个顶点都有一个int范围内的整数的标记. 不同的顶点可能有相同的标记.对于边(u,v),我们定义Cost(u,v)= ...

  5. Shell---自动测试局域网内的网络连通情况

    #!/bin/bash );do RE=`ping .$i` echo $RE >>result.log done

  6. jmeter-Http信息头管理器

    今天遇到的问题是:一个报名接口,用户先要登录后,再去报名.而登录页面:用户名.密码.动态图形验证码,所以不能直接使用jmeter参数传值方法. 测试的时候,需要先登录,获取ticket后,才能去请求下 ...

  7. iOS 上的相机捕捉 swift

    第一台 iPhone 问世就装有相机.在第一个 SKDs 版本中,在 app 里面整合相机的唯一方法就是使用 UIImagePickerController,但到了 iOS 4,发布了更灵活的 AVF ...

  8. poi进行excle操作

    一 excle导出: 所需要jar包 <dependency> <groupId>org.apache.poi</groupId> <artifactId&g ...

  9. Spring----. ref的用法

      ref元素是用在property中,来设置需要引用的容器管理的其它Bean.     它的用法:<ref bean|local|parent="someBean"> ...

  10. HDU-Digital Roots(思维+大数字符串模拟)

    The digital root of a positive integer is found by summing the digits of the integer. If the resulti ...