浅谈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 幻灯片的实现
Dec 06 Javascript
button没写type=button会导致点击时提交
Mar 06 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
JavaScript、jQuery与Ajax的关系
Jan 24 Javascript
jQuery的文档处理程序详解
May 10 Javascript
JS实现鼠标框选效果完整实例
Jun 20 Javascript
JavaScript的==运算详解
Jul 20 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
Javascript面试经典套路reduce函数查重
Mar 23 Javascript
浅谈webpack打包之后的文件过大的解决方法
Mar 07 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
Sep 14 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扩展编写点滴 技巧收集
2010/03/09 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
Javascript浅谈之this
2013/12/17 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
原生js实现轮播图
2017/02/27 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
chorme 浏览器记住密码后input黄色背景处理方法(两种)
2017/11/22 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Python如何测试stdout输出
2020/08/10 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
几道Java和数据库的面试题
2013/05/30 面试题
销售人员个人求职信
2013/09/26 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
毕业设计论文评语
2014/12/31 职场文书
家长会主持词开场白
2015/05/29 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers