$(document).on和$('#idname').on的区别?
$(document).on是把事件委托到document上,$('className').on是把事件绑定到.className元素上。
效率方面,直接绑定在元素上会更为高效,绑定在document上,每次document有点击动作,浏览器都会判断当前点击的对象,如果匹配,再决定要不要执行,多了一个判断的环节。
但在目前开发中,JS渲染效率很高,所以此异同基本可以忽略不计。
此外,针对(document).on的触发特点,延伸一下,(“className”).on为onclick绑定,只有在页面onload的时候执行一次,当页面刷新后,新加载的具有className的元素便没有事件绑定到上面了,相反$(document).on这种方法会刷新和重新赋予绑定操作,所以一定程度上更为全面。
举例子来说:
当要在页面加载完后要进行模拟点击事件(可用用trigger()函数);如果我们直接给某些元素(className)加点击(click)事件,即是使用$(".className").click(function(){}),有时候会由于加载先后的问题,这个模拟点击事件没来得及发生或者没发生完整(例如只是模拟点击了一部分元素)就停止了,这样的情况就会导致点击事件失效的问题,达不到我们想要的效果,但是如果使用$(document).on("click",".className",function(){}),这种情况因为是将事件委托给了页面,所有每当页面有点击事件时都会判断一次是否执行,这样就能保证所有的点击事件都被触发。
总之,想要高效建议使用$(".className").click(function(){}),如果想要全面即用$(document).on("click",".className",function(){})。
效率方面,直接绑定在元素上会更为高效,绑定在document上,每次document有点击动作,浏览器都会判断当前点击的对象,如果匹配,再决定要不要执行,多了一个判断的环节。
但在目前开发中,JS渲染效率很高,所以此异同基本可以忽略不计。
此外,针对(document).on的触发特点,延伸一下,(“className”).on为onclick绑定,只有在页面onload的时候执行一次,当页面刷新后,新加载的具有className的元素便没有事件绑定到上面了,相反$(document).on这种方法会刷新和重新赋予绑定操作,所以一定程度上更为全面。
举例子来说:
当要在页面加载完后要进行模拟点击事件(可用用trigger()函数);如果我们直接给某些元素(className)加点击(click)事件,即是使用$(".className").click(function(){}),有时候会由于加载先后的问题,这个模拟点击事件没来得及发生或者没发生完整(例如只是模拟点击了一部分元素)就停止了,这样的情况就会导致点击事件失效的问题,达不到我们想要的效果,但是如果使用$(document).on("click",".className",function(){}),这种情况因为是将事件委托给了页面,所有每当页面有点击事件时都会判断一次是否执行,这样就能保证所有的点击事件都被触发。
总之,想要高效建议使用$(".className").click(function(){}),如果想要全面即用$(document).on("click",".className",function(){})。