jQuery on()方法示例及jquery on()方法的优点


Posted in Javascript onAugust 27, 2015

jQuery on()方法是官方推荐的绑定事件的一个方法。

$(selector).on(event,childSelector,data,function,map)

由此扩展开来的几个以前常见的方法有.

bind()

 $("p").bind("click",function(){

alert("The paragraph was clicked.");

});

$("p").on("click",function(){


alert("The paragraph was clicked.");

});

delegate()

$("#div1").on("click","p",function(){

$(this).css("background-color","pink");

});

$("#div2").delegate("p","click",function(){


$(this).css("background-color","pink");

});

live()

$("#div1").on("click",function(){


$(this).css("background-color","pink");

});

$("#div2").live("click",function(){


$(this).css("background-color","pink");

});

以上三种方法在jQuery1.8之后都不推荐使用,官方在1.9时已经取消使用live()方法了,所以建议都使用on()方法。

tip:如果你需要移除on()所绑定的方法,可以使用off()方法处理。

$(document).ready(function(){
$("p").on("click",function(){


$(this).css("background-color","pink");

});

$("button").click(function(){


$("p").off("click");

});
});

tip:如果你的事件只需要一次的操作,可以使用one()这个方法

$(document).ready(function(){
$("p").one("click",function(){


$(this).animate({fontSize:"+=6px"});

});
});

trigger()绑定

$(selector).trigger(event,eventObj,param1,param2,...)
$(document).ready(function(){
$("input").select(function(){


$("input").after(" Text marked!");

});

$("button").click(function(){


$("input").trigger("select");

});
});

多个事件绑定同一个函数

$(document).ready(function(){
 $("p").on("mouseover mouseout",function(){
  $("p").toggleClass("intro");
 });
});

多个事件绑定不同函数

$(document).ready(function(){
 $("p").on({
  mouseover:function(){$("body").css("background-color","lightgray");}, 
  mouseout:function(){$("body").css("background-color","lightblue");}, 
  click:function(){$("body").css("background-color","yellow");} 
 });
});

绑定自定义事件

$(document).ready(function(){
 $("p").on("myOwnEvent", function(event, showName){
  $(this).text(showName + "! What a beautiful name!").show();
 });
 $("button").click(function(){
  $("p").trigger("myOwnEvent",["Anja"]);
 });
});

传递数据到函数

function handlerName(event) 
{
 alert(event.data.msg);
}
$(document).ready(function(){
 $("p").on("click", {msg: "You just clicked me!"}, handlerName)
});

适用于未创建的元素

$(document).ready(function(){
 $("div").on("click","p",function(){
  $(this).slideToggle();
 });
 $("button").click(function(){
  $("<p>This is a new paragraph.</p>").insertAfter("button");
 });
});

jQuery绑定事件的方法有几种,推荐使用.on()方法绑定,原因有两点:

1.on()方法可以绑定动态添加到页面元素的事件

比如动态添加到页面的DOM元素,用.on()方法绑定的事件不需要关心注册该事件的元素何时被添加进来,也不需要重复绑定。有的同学可能习惯于用.bind()、.live()或.delegate(),查看源码就会发现,它们实际上调用的都是.on()方法,并且.live()方法在jQuery1.9版本已经被移除。

bind:
function(
 types, data, fn ) {
  return this.on(
 types, null,
 data, fn );
},
live:
function(
 types, data, fn ) {
  jQuery(
this.context
 ).on( types, this.selector,
 data, fn );
  return this;
},
delegate:
function(
 selector, types, data, fn ) {
  return this.on(
 types, selector, data, fn );
}

移除.on()绑定的事件用.off()方法。

2.on()方法绑定事件可以提升效率

很多文章都提到了利用事件冒泡和代理来提升事件绑定的效率,大多都没列出具体的差别,所以为了求证,我做一个小测试。

假设页面添加了5000个li,用chrome开发者工具Profiles测试页面载入时间。

普通绑定(姑且这么称呼它)

$('li').click(function(){
  console.log(this)
});

绑定过程的执行时间

2013-08-13_190358

普通绑定相当于在5000li上面分别注册click事件,内存占用约4.2M,绑定时间约为72ms。

.on()绑定

$(document).on('click',
'li',
function(){
  console.log(this)
})

绑定过程的执行时间

2013-08-13_191010

.on()绑定利用事件代理,只在document上注册了一个click事件,内存占用约2.2M,绑定时间约为1ms。

以上就是本文的全部内容,希望对大家学习jquery on()方法有所帮助。

Javascript 相关文章推荐
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
Underscore.js 的模板功能介绍与应用
Dec 24 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
Aug 23 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
May 27 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
Vue2单一事件管理组件通信
May 09 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
EasyUI实现下拉框多选功能
Nov 07 Javascript
对angularJs中自定义指令replace的属性详解
Oct 09 Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 #Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 #Javascript
js实现的早期滑动门菜单效果代码
Aug 27 #Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
Aug 27 #Javascript
js实现向右横向滑出的二级菜单效果
Aug 27 #Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 #Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 #Javascript
You might like
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
PHP检测用户语言的方法
2015/06/15 PHP
Yii2中datetime类的使用
2016/12/17 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
JavaScript极简入门教程(一):基础篇
2014/10/25 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
python 多线程应用介绍
2012/12/19 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
专营店会计助理岗位职责
2013/11/29 职场文书
普通话演讲稿
2014/09/03 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers