提问人:JamesBrownIsDead 提问时间:12/31/2009 最后编辑:Brian Tompsett - 汤莱恩JamesBrownIsDead 更新时间:9/16/2020 访问量:1004
布线元素事件
Wiring element events
问:
我最近读了一篇博文。在这篇文章中,作者告诉读者不要以内联方式连接所有事件,而是在 DOM 准备好时连接它们,就像这样(jQuery 示例):onclick
<script type="text/javascript">
$(document).ready(function() {
$("myElement").click(...
});
</script>
这适用于页面上附加了事件的所有元素。而那个脚本块,连同它的所有连接,都应该放在页面的末尾。
他说,将其设置为内联更难以维护:
<span id="myElement" onclick="...">moo</span>
但他没有说为什么。
在其他人的经历中是这样吗?这样做是更好的做法吗?它的优势是什么?
答:
只是乱七八糟。最好将逻辑与标记分开,就像应该将标记与样式分开一样。如果保持干净的分色,则管理代码会更容易,因为例如,您不需要通过标记来修改将鼠标悬停在图像上时发生的情况。
# index.html
<img class="thumbnail" src="puppies.jpg" />
# index.js
$("img.thumbnail").fadeTo(0, 0.5).hover(
function () { $(this).fadeTo("fast", 1.0); },
function () { $(this).fadeTo("slow", 0.5); }
);
# index.css
img.thumbnail { border:1px dotted red; }
将所有事件处理程序放在一个位置可以使代码更易于维护,因为您不需要在 HTML 中搜索事件处理程序。它还允许您在处理程序中同时使用单引号和双引号,并且在分析脚本块时(而不是首次触发事件时)出现语法错误时会失败。
此外,每个内联事件处理程序都要求浏览器解析单独的表达式(相当于调用),从而损害性能。eval
评论
eval
eval
eval
好吧,通常认为尽可能地将代码和内容彼此分开是一种很好的风格。如果你使用这种方法,你就得到了非常干净的 HTML:
<span id="myElement">moo</span>
以及一个单独的中央代码存储库,您可以将其保存在一个地方,甚至可以放入外部 Javascript 文件中。
编辑 HTML 布局变得非常有趣,而且看起来也很棒。
我自己并不总是严格遵守这条规则,而且我不像其他人那样热心。但是在内联做事时,我允许自己最多进行函数调用。任何更复杂的东西都会很快变成代码汤。onclick='do_stuff()'
阅读这篇关于行为分离的文章,它解释了禁用 JavaScript 时的优雅降级。您还可以找到有关不显眼的 JavaScript 的文章,以了解 jQuery 的精神。
优点是,如果您的页面嵌入了许多控件 (ASCX),则不必在不同的控件 (ASCX) 或 Page 中搜索由 html 控件生成的事件。
如果事件是使用 Firebug 或其他调试器注册的,您甚至可以进行调试。
此外,如果使用事件冒泡,则可以避免使用大量事件处理程序。
对我来说,内联事件的一个优点是,只需检查元素,就可以直接看到执行操作时会发生什么。
如果您维护旧代码或由其他人完成,这将特别快。
另一个优点是速度,以后附加事件使用 DOM,它可能不如内联生成快。
通过使用像 PURE 这样不显眼的模板引擎,你可以保持 HTML 没有任何 JS 逻辑
下一个:布线元素事件
评论