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 继承机制实例
Aug 12 Javascript
使用jquery解析XML示例代码
Sep 05 Javascript
JavaSacript中charCodeAt()方法的使用详解
Jun 05 Javascript
jqTransform美化表单
Oct 10 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
js图片放大镜效果实现方法详解
Oct 28 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
网页中的图片查看器viewjs使用方法
Jul 11 Javascript
JScript实现地址选择功能
Aug 15 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 08 Javascript
Vue.js使用axios动态获取response里的data数据操作
Sep 08 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函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php 文本文件的读取效率
2012/02/10 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
Javascript !!的作用
2008/12/04 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
js自定义Tab选项卡效果
2017/06/05 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
小学教育毕业生自荐信
2013/11/18 职场文书
保险专业自荐信范文
2014/02/20 职场文书
岗位聘任书范文
2014/03/29 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
2014年会计工作总结
2014/11/27 职场文书
优秀大学生自荐信
2015/03/26 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
python周期任务调度工具Schedule使用详解
2021/11/23 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技
mysql查看表结构的三种方法总结
2022/07/07 MySQL