Javascript:注册事件处理程序的最佳位置
Javascript: Best place to register event handlers
这个问题太基本了,我确信一定是某物的重复,即使我寻找过类似的东西。
我的问题基本上是:最初为 HTML 元素注册事件处理程序的最佳位置在哪里?
注册事件处理程序的最简单方法显然是内联操作:
<div id = "mybutton" onclick = "doSomething()">Click me</div>
但这与现代 Web 开发中逻辑和内容分离的压倒性进展背道而驰。 因此,在2012年,所有的逻辑/行为都应该在纯Javascript代码中完成。 这很好,它带来了更易于维护的代码。 但是你仍然需要一些初始钩子,将你的HTML元素与Javascript代码挂钩。
通常,我只是做这样的事情:
<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>
这里的最佳实践是什么?
window.onload
:
<script type = "text/javascript">
window.onload = registerAllEventHandlers;
</script>
或者如果你使用 jquery:
$(registerAllEventHandlers);
使用 onload
有效,因为它会立即注册onload
事件,但在 DOM 准备就绪时触发它。
我对此有类似的答案,但一般是关于JavaScript的。但想法仍然是一样的 - 在关闭正文之前加载脚本。
利用抽象window.onload
和 DOM 就绪事件的库。这样,您可以在 DOM 准备就绪后立即加载脚本。
就个人而言,我在向元素中添加onlclick="doSomething();"
没有问题。没有逻辑,只是一个函数调用。
所有逻辑都在它应该在的地方:在HEAD
中定义的函数或单独的文件中。
告诉我当您向 A 标签添加 href="somepage.html"
甚至href="somepage.html#someanchor"
时有什么区别。
DOM 准备就绪后立即注册事件处理程序。在所有浏览器中检测这一点并不总是那么容易,尽管除了IE 8(及更早版本)之外,大多数广泛使用的浏览器现在都支持DOMContentLoaded
事件(感谢gengkev在评论中指出这一点)。
这基本上等同于在body
结束时调用registerAllEventHandlers
函数,但它的优点是你不需要在HTML中添加任何JavaScript。
它比使用window.onload
要好得多,因为在加载页面的所有资产(图像,CSS等)之前不会执行。
如果您使用的是主要的JavaScript框架之一,那么即使在旧版本的IE中,您也可以非常轻松地检测到DOM何时准备就绪。使用 jQuery,您将使用 ready
事件:
jQuery(document).ready(function () {
// Your initialisation code here
});
或速记:
jQuery(function() { … });
使用原型,您将使用 dom:loaded
事件:
document.observe("dom:loaded", function() {
// Your initialisation code here
});
- 其中是在ReactJS中放置一个值的最佳位置,该值由传入的初始参数计算一次,然后再也不会更改
- 应用 API 响应转换的最佳位置
- Javascript:注册事件处理程序的最佳位置
- 缩小Javascript代码和css代码的最佳应用程序
- 将角度文件存储在轨道中的最佳位置
- 存储angularJs中解析方法的最佳位置
- 在Zend Framework中,哪里是放置自定义jquery和javascript的最佳位置
- 在HTML文档中插入JavaScript的最佳位置
- 什么是存储和组织NOSQL数据库图像的最佳位置
- 事件回调的最佳位置在哪里?(匿名或命名)
- 将javascript行为附加到DOM的最佳位置
- 在Angular/Django SPA中存放ng模板的最佳位置是什么?
- 什么是放置<脚本的最佳位置?标记在JSP文件中
- 在文档中放置JavaScript/Ajax的最佳位置是什么?
- 在动态AJAX加载时,哪里是存储支持JSON的最佳位置
- 在ROR中放置JavaScript的最佳位置
- 哪里是过滤AJAX查询数据的最佳位置
- 哪里是在客户端上放置数据库ID的最佳位置
- 主干——插入JavaScript以操纵DOM的最佳位置是什么?
- 调用ajax的最佳位置是调用API