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 相关文章推荐
javascript innerHTML使用分析
Dec 03 Javascript
javascript实现回到顶部特效
May 06 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
Apr 18 Javascript
浅析JS操作DOM的一些常用方法
May 13 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
Jun 14 Javascript
开发用到的js封装方法(20种)
Oct 12 Javascript
100行代码实现一个vue分页组功能
Nov 06 Javascript
在Vue项目中使用Typescript的实现
Dec 19 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
Jun 24 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
用PHP和ACCESS写聊天室(一)
2006/10/09 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
理解JS绑定事件
2016/01/19 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
Python中的with...as用法介绍
2015/05/28 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Python实现直播推流效果
2019/11/26 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
学python最电脑配置有要求么
2020/07/05 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
实习自荐信
2013/10/13 职场文书
2014的自我评价
2014/01/13 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
爱祖国演讲稿
2014/05/04 职场文书
团支部推优材料
2014/05/21 职场文书
安全生产宣传标语
2014/06/06 职场文书
单位租房协议书范本
2014/12/04 职场文书
家长对孩子的寄语
2015/02/26 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js