这个问题是如此基本,我肯定在东西,即使我已经looked for something similar重复。Javascript:最好的地方注册事件处理程序
我的问题基本上是:最初为HTML元素注册事件处理程序的最佳位置在哪里?
注册的事件处理程序最简单的办法显然是只是做内联:
<div id = "mybutton" onclick = "doSomething()">Click me</div>
但这就违背了朝现代网络的发展逻辑和内容分离压倒性的游行。因此,在2012年,所有的逻辑/行为都应该在纯Javascript代码中完成。这很好,并且会导致更多可维护的代码。但你仍然需要一些初始的钩子,用你的Javascript代码来连接你的HTML元素。
通常情况下,我只是这样做:
<body onload = "registerAllEventHandlers()">
不过...。那仍是“欺骗”,是不是 - 因为我们仍然使用内嵌的JavaScript在这里。但我们还有其他的选择吗?我们不能做到这一点在<head>
节一<script>
标签,因为在这一点上,我们不能访问DOM,因为在页面尚未加载:
<head>
<script type = "text/javascript">
var myButton = document.getElementById("mybutton"); // myButton is null!
</script>
</head>
难道我们放置<script>
标签在底部的网页或东西?像:
<html>
<body>
...
...
<script type = "text/javascript">
registerAllEventHandlers();
</script>
</body>
</html>
这里的最佳做法是什么?
-1:'window.onload'事件不等同于使用jQuery的'ready'事件:'window.onload'将在页面加载完成时触发,包括所有外部资源(图像,CSS等)在HTML完成加载之后但在外部资源之前,jQuery的'ready'事件将触发。使用'window.onload'是一个坏主意,因为在很多情况下(很多图像,连接速度慢等),JavaScript事件很长一段时间不会被注册。 – georgebrock
@slebetman:你能否详细说明为什么在加载图像(等)之前附加JS事件处理程序是愚蠢的,并且理解两种不同技术之间的区别?在一个旨在学习和分享信息的网站上,评论说“这很愚蠢”并不是很有建设性。 – georgebrock