nia*_*her 14 javascript jquery
使用之间有什么区别
$("#element").click(function() { alert("test"); });
Run Code Online (Sandbox Code Playgroud)
和
<div id="element" onclick="alert('test');"></div>
Run Code Online (Sandbox Code Playgroud)
性能,功能或其他方面有什么不同吗?当我可以简单地使用属性时,我应该使用jQuery方式onclick吗?
kan*_*gax 18
jQuery click(以及大多数其他库的事件抽象)使用标准DOM L2addEventListener或MSHTML专有(后来被其他一些浏览器复制,如Opera)attachEvent,当时addEventListener不可用.
如果两者addEventListener都不attachEvent存在(就像一些古老的浏览器那样),jQuery什么也不做(从1.4a2开始).
onclick="..."从您的第二个示例中可以看出所谓的内部事件属性,并在HTML 4.01中定义.此类事件属性的值成为事件处理程序的函数体.当事件发生时,event将使用第一个参数调用此处理程序函数; 函数作用域链通常也会被扩充,以包含元素的一些祖先和元素本身.
内在事件属性的好处是更广泛的浏览器支持和可以说更好的性能.我记得看到事件属性的测试导致内存消耗要少得多,与通过addEventListener/ 初始化的那些相比attachEvent.我目前无法找到那些测试.
通过避免attachEvent,您自然也可以避免IE中的内存泄漏.大多数流行的Javascript库实际上在它们的事件抽象中创建循环引用,然后被迫在IE中执行页面卸载清理.显然,当您避免依赖的事件抽象时,这些问题就会消失attachEvent.
然而,事件属性的缺点是缺乏可重用性,打破了关注点和标记污染(影响文档大小及其可维护性).请记住,事件属性中的逻辑不断传递给客户端,而不是一次下载并缓存的外部脚本的一部分.也有可能在增强范围内被绊倒.
除非绝对必要,否则我建议避免使用事件属性.
Luc*_*eis 11
和
使用框架来绑定javascript事件也总是更好,因为如果你没有(attachEvent ..),你需要自己处理跨浏览器的事情.
| 归档时间: |
|
| 查看次数: |
7616 次 |
| 最近记录: |