jquery中on方法的优势:1、on()方法可以绑定动态添加到页面元素的事件,其添加的事件处理程序适用于当前及未来的元素;2、on()方法一次性能给元素添加一个或多个事件处理程序,可以提升效率。
前端(vue)入门到精通课程:进入学习
本教程操作环境:windows7系统、jquery3.6.1版本、Dell G3电脑。
on() 方法在被选元素及子元素上添加一个或多个事件处理程序。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。
对于单个元素注册事件分开写比较麻烦
$("p").click(function(){ $(this).hide(); }); $("p").mouseenter(function(){ $(this).css("background","blue"); });
所以可以通过on来一次性注册多个事件
$("p").on({ click:function(){ $(this).hide(); }, mouseenter:function(){ $(this).css("background","blue"); } }); //还可以合并 $("div").on( "mouseenter mouseleave", function(){ $(this).toggleclass( "current"); })
jQuery绑定事件的方法有几种,推荐使用.on()方法绑定,原因有2点:
1、on()方法可以绑定动态添加到页面元素的事件
比如动态添加到页面的DOM元素,用.on()方法绑定的事件不需要关心注册该事件的元素何时被添加进来,也不需要重复绑定。有的同学可能习惯于用.bind()、.live()或.delegate(),查看源码就会发现,它们实际上调用的都是.on()方法,并且.live()方法在jQuery1.9版本已经被移除。
使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)。
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 ); }
2、on()方法一次性能给元素添加一个或多个事件处理程序,可以提升效率
很多文章都提到了利用事件冒泡和代理来提升事件绑定的效率,大多都没列出具体的差别,所以为了求证,我做一个小测试。
假设页面添加了5000个li,用chrome开发者工具Profiles测试页面载入时间。
-
普通绑定(姑且这么称呼它)
$("li").click(function(){ console.log(this) });
$(document).on("click","li",function(){ console.log(this) })
绑定过程的执行时间
-
普通绑定相当于在li上面分别注册click事件,内存占用约4.2M,绑定时间约为72ms。
-
.on()绑定利用事件代理,只在document上注册了一个click事件,内存占用约2.2M,绑定时间约为1ms。
【推荐学习:jQuery视频教程、web前端视频】