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:Div层拖动效果实例代码
Aug 06 Javascript
Jquery 实现grid绑定模板
Jan 28 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
js通过指定下标或指定元素进行删除数组的实例
Jan 12 Javascript
vue-router路由简单案例介绍
Feb 21 Javascript
利用JS判断客户端类型你应该知道的四种方法
Dec 22 Javascript
详解ES6中的三种异步解决方案
Jun 28 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 Javascript
Angular利用HTTP POST下载流文件的步骤记录
Jul 26 Javascript
js实现扫雷源代码
Nov 27 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 阴历-农历-转换类代码
2012/01/16 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
js中new一个对象的过程
2017/02/20 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
python计算auc指标实例
2017/07/13 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
PyQt5每天必学之拖放事件
2020/08/27 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
法务专员岗位职责
2014/01/02 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
高一数学教学反思
2016/02/18 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
关于的python五子棋的算法
2022/05/02 Python