在唯品会实习生面试中,被面试官问了这么一个问题,“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. 关于vue项目多页面的配置

    基于vue2.0生成项目,一段时间都在找如何配置成多个页面的.网上有这样的例子相对也是比较详细的,但是还是有些许不一样的地方的.所以,我还是记录下来,当然我也是参考了网上的资料的. 当然先来个vue的 ...

  2. 9.path Sum III(路径和 III)

    Level:   Easy 题目描述: You are given a binary tree in which each node contains an integer value. Find t ...

  3. git基础命令整理

    首先安装git,然后选择一个文件夹做初始化!! yum -y install git                        ### 安装 git init                    ...

  4. ie7,ie8 js中变量名和页面元素ID重名,报错

    js变量名和一个div的id重名,报错.不知所以然...做个标记

  5. delete ELK index

    Go to tab “Dev Tools”4. On the left console type:GET _cat/indices?v&s=store.size:descand execute ...

  6. eclipse.ini X64 Oxygen.2 Release (4.7.2) lombok

    X64 Eclipse Java EE IDE for Web Developers. Version: Oxygen.2 Release (4.7.2)Build id: 20171218-0600 ...

  7. sqlserver 索引进阶(上)

    参考原文:http://www.cnblogs.com/tjy9999/p/4494662.html 2. 非聚集索引 SET STATISTICS io ON SET STATISTICS time ...

  8. 02Data

    1.数据从何而来 2.数据对象和属性类型 数据集合的类型 结构数据的重要特征 数据对象 属性 属性类型 数据属性的类型 离散 vs.连续属性 3.数据的(基本)统计描述 分布度量 代数度量 整体度量 ...

  9. 1.centos7 安装zookeeper

    1.安装jdk 1)查找jdk包: yum search java|grep jdk 2)安装: yum install -y java-1.8.0-openjdk.x86_64 2. 安装ZooKe ...

  10. 进入wordpress中的模板文件

    Wordpress的页面结构 一个简单的wordpress由 头部.内容.页脚组成,每个块中的每一个都由当前wordpress主题中模板文件生成. eg: 头:包含重要的信息,一般都是网页的头部. 内 ...