代码之家  ›  专栏  ›  技术社区  ›  Babiker

为什么现在越来越多的人使用脚本来分配事件处理程序,而不是从html元素中分配事件?

  •  3
  • Babiker  · 技术社区  · 14 年前

    作为一个学习者,我喜欢看很多源代码。自从一年前我开始学习JavaScript以来,我注意到一种趋势,即人们不再像 onclick="doSomething()" ,但越来越多地使用 document.getElementById("someId").onclick = function(){..some code..};

    这种趋势背后的原因是什么?

    5 回复  |  直到 14 年前
        1
  •  14
  •   SLaks    14 年前

    在Javascript中分配处理程序将所有代码放在一个地方,而不是分散在整个HTML中。
    这有助于将内容与脚本分离,就像CSS有助于将内容与样式分离一样。

    它也更快,因为浏览器不需要为每个处理程序属性启动Javascript解析器。

    这是一个例子 Unobtrusive Javascript .

        2
  •  5
  •   T.J. Crowder    14 年前

    其他的答案并没有涉及到这个问题,所以:

    您的示例使用(反射的) onclick 属性,即使在JavaScript代码中:

    document.getElemenbyId("someId").onclick = function(){..some code..};
    

    ……对我来说,这忽略了在不使用属性的情况下这样做的一个主要原因:与他人友好相处。附加处理程序的DOM2方法( addEventListener ,或 attachEvent 在IE上[IE9有标准 加法器 最后]):

    document.getElementById("someId").addEventListener("click", function() { ... }, false);
    // or
    document.getElementById("someId").attachEvent("onclick", function() { ... });
    

    ... 是 非排他性 -可以同时附加多个处理程序。如果你分配给 onclick公司 ,你把以前的任何一个处理程序都踢出去,然后接管。

    对我来说,这个“玩得很好”的东西是一个很大的卖点。好吧,这和保持代码和标记的分离是分不开的,但是其他的答案已经很好地涵盖了这一点。

        3
  •  2
  •   Shadow Wizard    14 年前

    HTML应该只是标记,纯内容。

    设计应该在CSS样式表中。

    动态脚本应该在JavaScript代码中,单独的文件是好的。

    只是感觉更好,看起来更好——据我所知,当所有脚本都放在一个地方而不是分散在整个HTML中时,它不仅更高效,而且更优雅、更易于维护。:)

        4
  •  0
  •   Community Fabien Hure    7 年前

    正如其他答案所提到的,主要原因是关注点的分离(在本例中,保持行为与内容的分离),这是完全合理的。然而,这并不总是唯一的考虑。我以前写过 lengthy answer to a related question .

        5
  •  0
  •   BenMorel mehmet cinar    11 年前

    我认为大多数人都在使用jQuery。 $("#someId").click(function(){}) 当您想将一个事件附加到许多元素时,jQuery使之变得简单,并将您的函数放在一个地方。