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 AutoScroller 函数类
May 29 Javascript
JavaScript 对Cookie 操作的封装小结
Dec 31 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
iframe中使用jquery进行查找的方法【案例分析】
Jun 17 Javascript
Bootstrap零基础入门教程(三)
Jul 18 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
Sep 06 Javascript
基于jQuery实现定位导航位置效果
Nov 15 jQuery
Vue.js进阶知识点总结
Apr 01 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
Jun 14 Javascript
10种JavaScript最常见的错误(小结)
Jun 21 Javascript
Ajax实现异步加载数据
Nov 17 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
thinkPHP3.2简单实现文件上传的方法
2016/05/16 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
jquery根据name属性查找的小例子
2013/11/21 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
基于jquery实现导航菜单高亮显示(两种方法)
2015/08/23 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
js实现表格数据搜索
2020/08/09 Javascript
Python映射拆分操作符用法实例
2015/05/19 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
Python中生成ndarray实例讲解
2021/02/22 Python
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
企业活动策划方案
2014/06/02 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫