直接从锚标记调用函数与创建事件onload有什么好处和/或缺陷?

时间:2011-11-18 18:46:02

标签: javascript jquery

是否有正确/标准的方式?

<a href="#" onclick="function();">Link</a>

VS

<script>
$(document).ready(function(){
   $('#link1').click(function(){ ... });
});
</script>
<a href="#" id="link1">Link</a>

3 个答案:

答案 0 :(得分:7)

我个人更喜欢第二种。它允许我分离我的标记和脚本。这意味着脚本可以放在一个单独的文件中,因为脚本是静态资源,所以它们会被缓存,缩小,混淆,......而且缩小的标记大小显然会导致带宽减少,因此加载站点更快。在网页中,实际上有3个概念不应混合:

  • 标记
  • 脚本
  • 定型

答案 1 :(得分:2)

从头到尾:

  1. 第一个只允许在一个元素上每次使用一个处理程序
  2. 第一个无法访问除全局范围之外的任何内容
  3. 第一个不允许事件委派,因为某些事件需要在符合标准的浏览器中使用事件捕获来委派工作(即模糊和焦点),并且您无法选择是否在那里使用捕获或冒泡。 / LI>
  4. 第一个......读@ DarinDimitrov的答案。
  5. 当你问问facebook或hotmail时,你会使用第一个。我什么都没有。

答案 2 :(得分:1)

我的2c:

如今随着大量使用ajax和jQuery的多功能性的出现,我喜欢集中处理管理。

<a href='#' onClick= ...></a>

不需要href。在那,我,我自己,在不需要的时候避免额外的压力。因此,我不会在解析为onClick的锚点上编码href。其次,除非我特别需要管理锚点(比如$('a ...)....),我也不使用锚点。我只使用普通div或span甚至段落(&lt; p&gt;)。

a(锚)允许自动光标:锚点的指针和文本修饰处理。

$(document).ready( function () {
    $('#link').click(...

是一种集中处理的好方法,您可以在其中记录所有条目:

function a() { .. }
function b() { .. }
function c() { .. }
....

$(document).ready( function () {
    // originated on thatfile.html
    $('#clicka').click(a());
    // originated on thisfile.asp
    $('#clickb').click(b());
    // originated on form c in file myforms.asp
    $('#clickc').click(c());
});
相关问题