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 相关文章推荐
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
在次封装easyui-Dialog插件实现代码
Nov 14 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
May 20 Javascript
jQuery中ajax错误调试分析
Dec 01 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
Jun 22 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
javascript实现5秒倒计时并跳转功能
Jun 20 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 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实现文件与16进制相互转换的方法示例
2017/02/16 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
网页打开自动最大化的js代码
2012/08/22 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
JS Math对象与Math方法实例小结
2019/07/05 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
python函数装饰器用法实例详解
2015/06/04 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python面向对象类编写细节分析【类,方法,继承,超类,接口等】
2019/01/05 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
后勤自我鉴定
2013/10/13 职场文书
舞蹈专业求职信
2014/06/13 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
迁户口计划生育证明
2014/10/19 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS