使用addEventListner和简单的Onclick/Ondblclick调用函数有什么区别?使用addEventListner和简单的Onclick/Ondblclick调用函数有什么区别?
2
A
回答
4
onclick等是DOM 0级事件。他们在每个浏览器中工作,但他们不允许您轻松地将多个处理程序添加到同一元素中的相同事件。这意味着,使用像
window.onload = function() {
// THE CODE TO RUN
};
东西将删除已经没有任何功能,所以你不得不用这样的招数:
(function (oldonload) {
window.onload = function() {
// THE CODE TO RUN
oldonload();
};
}(window.onload));
用的addEventListener你没有做到这一点。你只是写:
window.addEventListener("load", function() {
// THE CODE TO RUN
}, false);
它只是工作...但不是在IE浏览器!在IE上,你必须使用attachEvent,它除了在 IE之外不能在任何地方使用。所以,你还是要这样写代码:
function yourCode() {
// THE CODE TO RUN
}
if (window.addEventListener) {
window.addEventListener('load', yourCode, false);
} else {
window.attachEvent('onload', yourCode);
}
而在所有情况下,你还需要检查文件是否已经加载,所以你只要运行你的代码瞬间,而不是将它绑定到一个已经发生的事件而不会再发生了 - 这意味着更多的代码:
function yourCode() {
// THE CODE TO RUN
}
if(document.loaded) {
yourCode();
} else {
if (window.addEventListener) {
window.addEventListener('load', yourCode, false);
} else {
window.attachEvent('onload', yourCode);
}
}
的一点是,如果你想让你的事件处理代码保持强劲,并与所有浏览器兼容,那么它很快变得非常复杂。这就是为什么我总是建议使用像jQuery库做出来给你,让你不必担心这些细节,只是写:
$('some-id').click(function() {
// THE CODE TO RUN
});
,它神奇地运行在所有浏览器。
1
addEventListner允许您添加多个侦听器。
1
当您直接在节点上添加onclick/onmouseover时,您会将结构/数据与行为耦合在一起,这并不好,特别是如果您关心能否维护代码。 (使用addEventListener)你:(a)获得对你的JS单独进行增量更改的能力(反之亦然),(b)有能力在不同的JS上重复使用相同的JS HTML(在另一页上说),(c)获得单独缓存JS的能力(假设你把它放在一个外部文件中),从而提高总体性能。
最重要的是(正如@JohnPick的回答),它允许您将多个侦听器添加到同一个节点。
相关问题
- 1. 函数调用和函数引用有什么区别?
- 2. apply()函数和使用类对象的函数调用有什么区别?
- 3. 使用compose()和简单的flatMap()之间有什么区别?
- 4. 简单睡眠(使用wait_event _ *()函数)和高级睡眠(使用prepare_to_wait()函数)有什么区别?
- 5. include()和在PHP中调用函数有什么区别?
- 6. 调用函数{}和()之间有什么区别?
- 7. 函数调用“mail()”和“@mail()”之间有什么区别?
- 8. 函数调用和goto&NAME在Perl中有什么区别?
- 9. 回调函数和常规函数有什么区别?
- 10. 调用exampleFunction()和exampleFunction.call()有什么区别?
- 11. 绑定和调用有什么区别?
- 12. 本地调用open_sftp()和通过单独的函数有什么区别?
- 13. JavaScript:函数名称和函数引用有什么区别?
- 14. 使用移调有什么区别?
- 15. NumPy数组和简单Python数组有什么区别?
- 16. NtFsControlFile()和DeviceIoControl()函数有什么区别?
- 17. $ get和$ find函数有什么区别?
- 18. round()和trunc()函数有什么区别?
- 19. 函数完成执行后调用`done()`和调用`return`有什么区别?
- 20. 在Python中使用@staticmethod和全局函数有什么区别?
- 21. 回调函数onContextItemSelected()中的ContextMenuInfo.id和item.getItemId有什么区别?
- 22. 使用回调函数和直接在java中调用静态函数有什么区别?
- 23. 使用int [] []和int [,]有什么区别?
- 24. 使用和extern有什么区别?
- 25. 使用WorkflowInvoker和WorkflowApplication有什么区别?
- 26. 有什么区别使用=和:在javascript
- 27. 这两个自调用函数有什么区别
- 28. 这两种调用JavaScript匿名函数有什么区别?
- 29. 调用Stream.Write和使用StreamWriter有什么区别?
- 30. Javascript - 自调用和正常函数调用之间的区别是什么?