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时间格式化函数(比较实用)
May 14 Javascript
JavaScript中的标签语句用法分析
Feb 10 Javascript
js实现跨域的方法实例详解
Jun 24 Javascript
异步JS框架的作用以及实现方法
Oct 29 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
原生JS实现匀速图片轮播动画
Oct 18 Javascript
JavaScript基础进阶之数组方法总结(推荐)
Sep 04 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
Feb 09 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
May 21 jQuery
vue v-model动态生成详解
Jun 30 Javascript
VUE简单的定时器实时刷新的实现方法
Jan 20 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 zip扩展Linux下安装过程分享
2014/05/05 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
django将数组传递给前台模板的方法
2019/08/06 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
求职信格式范本
2013/11/15 职场文书
奶茶店创业计划书范文
2014/01/17 职场文书
小学母亲节活动方案
2014/03/14 职场文书
公司股权转让协议书
2014/04/12 职场文书
5.12护士节演讲稿
2014/04/30 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
JS中一些高效的魔法运算符总结
2021/05/06 Javascript
浅谈MySQL函数
2021/10/05 MySQL
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js