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


Posted in Javascript onFebruary 23, 2017

本篇文章介绍了,关于jQuery新的事件绑定机制on()的使用技巧。需要的朋友参考下 

今天浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理事件绑定。因为在此之前有bind(),
live(),

delegate()等方法来处理事件绑定,jQuery从性能优化以及方式统一方面考虑决定推出新的函数来统一事件绑定方法并且替换掉以前的方法。

on(events,[selector],[data],fn)

events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydown.myPlugin" 。

selector:一个选择器字符串用于过滤器的触发事件的选择器元素的后代。如果选择器为null或省略,当它到达选定的元素,事件总是触发。

data:当一个事件被触发时要传递event.data给事件处理函数。

fn:该事件被触发时执行的函数。 false 值也可以做一个函数的简写,返回false。

替换bind()

当第二个参数'selector'为null时,on()和bind()其实在用法上基本上没有任何区别了,所以我们可以认为on()只是比bind()多了一个可选的'selector'参数,所以on()可以非常方便的换掉bind()

替换live()

在1.4之前相信大家非常喜欢使用live(),因为它可以把事件绑定到当前以及以后添加的元素上面,当然在1.4之后delegate()也可以做类似的事情了。live()的原理很简单,它是通过document进行事件委派的,因此我们也可以使用on()通过将事件绑定到document来达到live()一样的效果。

 live()写法

$('#list li').live('click', '#list li', 
function() {
 //function code here.
});

on()写法

$(document).on('click', '#list li', 
function() {
 //function code 
here.
});

这里的关键就是第二个参数'selector'在起作用了。它是一个过滤器的作用,只有被选中元素的后代元素才会触发事件。

替换delegate()

delegate()是1.4引入的,目的是通过祖先元素来代理委派后代元素的事件绑定问题,某种程度上和live()优点相似。只不过live()是通过document元素委派,而delegate则可以是任意的祖先节点。使用on()实现代理的写法和delegate()基本一致。

delegate()的写法

$('#list').delegate('li', 'click', 
function() {
 //function code here.
});

on()写法

$('#list').on('click', 'li', function() 
{
 //function code here.
});

貌似第一个和第二个参数的顺序颠倒了一下,别的基本一样。

总结

jQuery推出on()的目的有2个,一是为了统一接口,二是为了提高性能,所以从现在开始用on()替换bind(),
live(),

delegate吧。尤其是不要再用live()了,因为它已经处于不推荐使用列表了,随时会被干掉。如果只绑定一次事件,那接着用one()吧,这个没有变化。

jQuery是 一款优秀的JavaScript框架,在旧版里主要用bind()方法,在新版里又多了两种One(),Live(),下面介绍这几种方法的使用:

1. bind/Unbind

在jquery的事件模型中,有两个基本的事件绑 定函数,bind与unbind,这两个函数的含义就是匹配页面元素进行相关事件的处理。比如我们在JS中经常使用到的 onfocus,onblur,onmouseover,onmousedown等事件都可以作为bind的参数进行传递。

$("#id").bind('click',function(){alert('tt!')});

其中bind的第一个参数代表的含义是:事件类型(注意不需要加on),function中的代码就是你要执行的逻辑 代码
多个事件绑定:bind还允许你绑定多个事件,事件名字之间用空格隔开,例如:

$('a').bind('click mouseover',function(){

在最新的jquery1.4版本中,对bind方法进行了改进,你可以在bind方法传入一个类JSON对象来一次绑定多 个事件处理函数。

$('a').bind({
click:function(){alert('a');},
mouseover:function(){alert('a again!')}

在function函数中,你还可以通过传递一个javaScript对 象给function方法,这个事件对象通常是可以省略的。
bind中还有一个参数data, 该参数一般情况下很少使用,通常为了解决在同一个方法中处理同一个变量时有很好的处理。

var productname="Sports Shoes";
$('#Area').bind('click',function(){
alert(productname);
});
productname="necklace",
$('#Area').bind('click',function(){
alert(productname);
});

由于变量productname被重新赋值,所以输出的消息都是”necklace”,这里不了解可以去查阅下关于JavaScript的变量作用域,要 解决这个问题就必须使用到data参数,

var productname="Sports Shoes";
$('#Area').bind('click',{pn:productname},function(){
alert(event.data.pn);
});
productname="necklace",
$('#Area').bind('click',{pn:productname},function(){
alert(event.data.pn);
});

2. One

为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。该方法与bind方法的参数一样,与bind方法的区别就是只对匹配元素的事 件处理执行一次,执行完之后,以后再也不会执行,当然重新发起web请求时它又会执行一次。

$('a').one('click',function(){
alert('a');
})

单击页面上的a元素后,弹出消息,除非用户发起第二次请求,否则再次点击a元素不会弹出消息对话框。

3. live

该方法主要是能处理动态添加的元素,给那些后添加的元素也一样绑定事件。

$('a').live('click,function(){
alert('show message!');
})

然后如果我添加一个元素,

$('body').appnend('Another Element');

那么该元素也会被触发事件处理函数alert。
另外,jQuery还提供了一些绑定这些标准事件类型的简单方式,比如.click()用于简化.bind(‘click')。

一共有以下这些事件名称:blur, focus, focusin, focusout, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error 等。

下面看下jQuery中绑定事件bind() on() live() one()的异同

jQuery中绑定事件的四种方法,他们可以同时绑定一个或多个事件

      bind()-------------------------版本号小于3.0(在Jquery3.0中已经移除,相应unbind()也移除)

       live()--------------------------版本号小于1.7(在Jquery1.7中已经移除,相应die()也移除)

       delegate()-------------------版本号小于1.7(在Jquery1.7中已经移除)

       on()---------------------------版本号大于1.7(在Jquery1.7中添加,相应off()也添加)

A:bind()事件的用法

<title>绑定事件</title>
 <script src="js/jQuery1.11.1.js" type="text/javascript"></script>
 <script>
  $(function () {
   $("p").bind({
    "mouseover": function () {
     $("p").css("background-color", "red");
    },
    "mouseout": function () {
     $("p").css("background-color", "");
    }
   });
  });
 </script>
</head>
<body>
 <p>what are you doing?</p>
</body>
</html>

第一个最大的区别就是:bind()的事件绑定是只对当前页面选中的元素有效。如果你想对动态创建的元素bind()事件,是没有办法达到效果的。

在后面的动态生成DOM元素绑定事件就要使用on();

Javascript 相关文章推荐
使用JS操作页面表格,元素的一些技巧
Feb 02 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
Oct 09 Javascript
一个js控制的导航菜单实例代码
Dec 03 Javascript
jQuery的:parent选择器定义和用法
Jul 01 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
微信小程序 教程之列表渲染
Oct 18 Javascript
详解vue-resource promise兼容性问题
Jun 20 Javascript
jQuery选择器特殊字符与属性空格问题
Aug 14 jQuery
angularjs实现猜大小功能
Oct 23 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
微信小程序登陆注册功能的实现代码
Dec 10 Javascript
bootstrap weebox 支持ajax的模态弹出框
Feb 23 #Javascript
COM组件中调用JavaScript函数详解及实例
Feb 23 #Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 #Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 #Javascript
JS实现的五级联动菜单效果完整实例
Feb 23 #Javascript
jquery实现焦点轮播效果
Feb 23 #Javascript
SVG描边动画
Feb 23 #Javascript
You might like
php实现网站插件机制的方法
2009/11/10 PHP
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
js确定对象类型方法
2012/03/30 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
Python+Django搭建自己的blog网站
2018/03/13 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
python动态进度条的实现代码
2019/07/03 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python库matplotlib绘制坐标图
2019/10/18 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
在python里使用await关键字来等另外一个协程的实例
2020/05/04 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
院领导写的就业推荐信
2014/03/09 职场文书
毕业大学生自荐信
2014/06/17 职场文书
县政府办公室领导班子对照检查材料思想汇报
2014/09/28 职场文书
英文辞职信范文
2015/05/13 职场文书
2016年元旦主持词
2015/07/06 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书