在“简单”网站上哪种做法更好。 (很少有javascript动作)
a:将事件/动作/功能附加到元素上(div / span /...)
就像这个按钮和点击事件如何添加到某个div:
$( "#create-user" )
.button()
.click(function() {
$( "#dialog-form" ).dialog( "open" );
});
b:或者在行中有元素动作调用函数。
<div id=calc onclick="doCalcFunc(this)">calc something</div>
有人质疑来自更多OO背景的人,java / c#,所以发现更喜欢B,简单易于发现正在发生的事情。也许它可能只是在网络调试工具上学习更多,但是能够点击转到元素上的源,并且看到,哦,当你点击这个元素时,它将运行函数X.至于方法“A”,我必须在源代码上搜索某些函数,这些函数可能附加到元素ID,类型,类或元素的其他指示符。
答案 0 :(得分:4)
即使对于一个简单的网站,选项A 中显示的格式也会更好,因为它会从HTML标记中分离出代码。这也是Unobtrusive JavaScript的主要原则之一。
根据我的经验,使用HTML DOM或类似JQuery的框架替换和修改附加到元素的事件要容易得多,然后在标记中替换多行内联代码。我工作的大多数网站都有动态生成的内容,使用内联函数维护所有代码会很麻烦。
此外,选项A(将事件附加到元素上)还允许您使用各种功能,如匿名函数和各种样式的closures。在选项B中,需要在doCalcFunc
元素之前定义div
才能工作。使用选项A,可以在将函数附加到div的事件时定义该函数。这使得最初编码和将来维护站点具有更大的灵活性。
答案 1 :(得分:1)
虽然我大部分时间都会使用基于JS的处理程序赋值,但有些时候处理程序属性可以很好地工作。
重要的是不要丢弃任何潜在的工具,而是要了解这两种技术的优缺点,我将在下面列出这些技巧。我打算尝试给每个&#34; con&#34;一个可以考虑的对应点。
eval
。
eval
一次,就像其他JavaScript一样。onclick="foo()"
属性时,您实际上正在为element.onclick
分配功能。由于每个元素只能分配一个,因此对JS中属性的任何更改都将覆盖您的处理程序。
.onclick
处理程序的理由。有很多情况下不存在冲突。class="click_handler"
与使用设计良好的DOM进行onclick="handler(this)"
有很大不同,但它确实如此...&#39很可能你根本不需要上课就可以完成任务。 (虽然您在标记中失去了可见性优势。) 因此,在努力避免任何一种宗教信仰遵循任何一种方法的同时,我试图提供一些关于某些考虑因素的概述。
虽然您可能会发现自己使用更流行的DOM-ready方法来分配处理程序,但在某些情况下,内联处理程序可以很好地满足要求,尤其是在零延迟方面非常重要的情况下。