浅谈jQuery中事情的动态绑定


Posted in Javascript onFebruary 12, 2017

在jQuery的开发过程中,我们往往需要处理各种事件,例如click(),hover()等。在jQuery的API中,我们可以使用不同的方法来将这些事件绑定到特定的元素中。今天这篇文章中,我们将要介绍如何使用bind(),on(),live()和delegate()方法来绑定特定的事件,什么情况下使用,什么情况下不适用它们。希望能够帮助大家更好的了解和使用jQuery的时间处理方法。

一、bind()方法

使用较早版本jQuery的教程或者应用中,我们往往使用bind()方法来将事件绑定到特定的元素上,如下:

<section id="container">
 <img class="scv" src="images/scv.gif" alt="Terran unit" />
</section>
$('.scv').bind('click', function(){
  $('#container').append('<img class="scv" src="images/scv.gif" alt="Terran unit" />');
});

如果你查看相关jQuery1.7.1最新文档的话,大家应该知道最新的jQuery中bind目前其实最后也是调用on()方法来实现的,所以呢,如果现在大家使用最新jQuery版本(目前为1.7.1)的话,尽量避免使用bind()方法。

如果大家点击运行这个示例肯定会发现,当点击第一个图片时,会生成新的图片,但是如果你点击新生成的图片,不会继续执行添加新图片的操作。为什么会这样呢? 因为使用bind绑定的元素是页面上所有存在的class="scv"的元素,新生成的元素添加到DOM,并没有绑定我们添加的click方法。那么怎么让新的图片也可以绑定我们click方法呢。我们可以使用clone()方法,如下:

$('.scv').bind('click', function(){
 $(this).clone(true).appendTo('#container');
});

我们这里使用clone方法来生成一个新的图片,并且添加到#container容器中。这里我们使用clone方法参数true,代表克隆的元素同时克隆绑定的方法。

二、live()方法

在老的jQuery版本中,我们有一个方法专门用来处理动态生成的元素的事件绑定-live(),使用live()方法可以将方法绑定的效果应用到已存在或者新创建的DOM元素。代码如下:

$('.scv').live('click', function(){
 $(this).clone().appendTo('#container');
});

live()调用过程如下:

我们首先将click方法绑定到了Document,然后,查找Document里是否有.scv这个元素。这个过程对于性能来说可能比较浪费,所以我们可以使用如下带参数方法优化方式:

$('.scv', '#container').live('click', function(){
 $(this).clone().appendTo('#container');
});

以上代码中我们使用#container作为绑定的上下文,jQuery将会在#container这个元素中查询.scv元素。

三、Delegate()方法

在最新的jQuery版本中,我们最好不要使用live()方法,因为它已经被放弃了,这里我们使用delegate方法来指定事件绑定的上下文,如下:

$('#container').delegate('.scv','click', function(){
  $(this).clone().appendTo('#container');
});

大家可以看到以上代码中,我们首先设定了方法绑定的上下文-#container,然后,寻找class为.scv的元素,再绑定click方法。

注意:这里克隆后添加到的元素应该是你定义的上下文,否则,新生成的图片绑定不上click方法。

四、on()方法

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

这是jQuery官方给出的Api,其实在最新版本的jQuery类库中,所有以上方法在后面其实都是调用on()方法,所以,如果你开发最新版本的jQuery,完全可以使用on()方法来处理所有的事件绑定,避免过多的方法调用。如下:

$('.scv').on('click', function(){
  $(this).clone(true).appendTo('#container');

});

如果要保证你动态添加的东西可以绑定上handler,那么$("selector").on()中的selector应该是更高的级别,父div,body或者document等。

五、总结

总的来说,最新的jQuery版本中,所有的方法基本最后都使用on()方法来处理,如果你针对新版本的jQuery做开发,大家可以考虑使用delegate()和on()方法处理事件绑定,虽然以前方法也可以用,但是大都都已经退出历史舞台。

以上这篇浅谈jQuery中事情的动态绑定就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现self的resend
Jul 22 Javascript
JQuery1.6 使用方法三
Nov 23 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
Feb 22 Javascript
html的DOM中Event对象onabort事件用法实例
Jan 21 Javascript
AngularJS教程之环境设置
Aug 16 Javascript
vue自动化表单实例分析
May 06 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
探索JavaScript中私有成员的相关知识
Jun 13 Javascript
vue+elementui 对话框取消 表单验证重置示例
Oct 29 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 Javascript
vue element-ui实现动态面包屑导航
Dec 23 Javascript
学前端,css与javascript重难点浅析
Jun 11 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
Feb 12 #Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 #Javascript
jQuery的中 is(':visible') 解析及用法(必看)
Feb 12 #Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 #Javascript
利用Node.js编写跨平台的spawn语句详解
Feb 12 #Javascript
超全面的vue.js使用总结
Feb 12 #Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 #Javascript
You might like
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
thinkphp3.2.3 分页代码分享
2016/07/28 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
javascript radio 联动效果
2009/03/04 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
vant实现购物车功能
2020/06/29 Javascript
python 自动提交和抓取网页
2009/07/13 Python
python计算书页码的统计数字问题实例
2014/09/26 Python
python记录程序运行时间的三种方法
2017/07/14 Python
简单了解Python3 bytes和str类型的区别和联系
2019/12/19 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
python如何使用腾讯云发送短信
2020/09/17 Python
python实现感知机模型的示例
2020/09/30 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
英国健身专家:WIT Fitness
2021/02/09 全球购物
班组长工作职责
2013/12/25 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
舞出我人生观后感
2015/06/16 职场文书
宾馆卫生管理制度
2015/08/06 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python