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中callee与caller的用法和应用场景
Dec 08 Javascript
jquery EasyUI的formatter格式化函数代码
Jan 12 Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
Dec 13 Javascript
js实现添加删除表格(两种方法)
Apr 27 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
深入理解Vue 组件之间传值
Aug 16 Javascript
javascript和php使用ajax通信传递JSON的实例
Aug 21 Javascript
Vue实现表格中对数据进行转换、处理的方法
Sep 06 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 Javascript
vue项目创建步骤及路由router
Jan 14 Javascript
JavaScript中数组去重的5种方法
Jul 04 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
PHP系统流量分析的程序
2006/10/09 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php 魔术方法详解
2014/11/11 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
javascript 贪吃蛇实现代码
2008/11/22 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript中的Primitive对象封装介绍
2014/12/31 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Python Grid使用和布局详解
2018/06/30 Python
详解Python实现进度条的4种方式
2020/01/15 Python
Python爬虫教程知识点总结
2020/10/19 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
一套Java笔试题
2016/08/20 面试题
采用怎样的方法保证数据的完整性
2013/12/02 面试题
护士的岗位职责
2013/12/04 职场文书
党员入党表决心的话
2014/03/11 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS