在JavaScript中附加事件

时间:2010-04-10 20:32:34

标签: javascript jquery javascript-events

作为评论中的一个问题,评论者写道(强调我的):

  

...通过使用内联“onclick”,你正在做类似的事情,但它更难维护,更容易出问题。 JavaScript社区作为一个整体已经暂时离开了内联JavaScript。

这是指使用

将事件附加到HTML元素
$("#someID").click(function(){
    do something here...;
});

而不是

<a id="someID" onclick="someFunction();">

是否真的从旧学校的方式转变为内联声明事件,如果是这样,其中一个的好处是什么?

编辑我想包含对original question的引用可能会有所帮助。它询问是否为每个选项卡附加了不同的点击事件。 我的回答废话,我欠FallenRayne道歉=)。

4 个答案:

答案 0 :(得分:4)

是的,至少在社区的某些部分,不确定如何衡量它。

绝对的优势,在我的头顶:

  • 清洁/少代码
  • 易于调试
  • 更容易更改
  • 更容易打包
  • 性能

从纯粹的数量来看,想一想:

<a onclick="someFunction();">
<a onclick="someFunction();">
<a onclick="someFunction();">
<a onclick="someFunction();">
<a onclick="someFunction();">

一次

$("a").click(someFunction);

您可以通过css选择器等对大多数框架执行此操作,一次处理多个元素。这意味着在服务器代码中,您只需分配ID和类,客户端更容易单独处理。调试也更容易,例如:在控制台中我可以$('a').unbind('click').click(...something new...);

另一个好处是性能。如果我可以将其拆分为一个单独的.js文件,由客户端缓存,那就是我不会每次都发送的更薄的网页和额外的数据。较小的网页=更快的负载。

这是另外一个例子,考虑它是多么简单,通过jQuery授予一些框架动作,但这看起来如何与内联事件一起使用?

$("li").hover(function() {
  $(this).children().slideToggle();
});

相比之下,这是一个巨大的数量的内联代码,即使你忽略了动画部分它也很混乱(想想mouseenter/mouseleave,而不是mouseover/mouseout ......前者, .hover()使用哪个更复杂)

答案 1 :(得分:4)

最大的好处是内容(html)和行动/行为(javascript)的分离。这称为Unobtrusive javascript。保持这些分离使得更容易改变而不影响另一个。

答案 2 :(得分:3)

  

是否真的有一种偏离旧学校宣传内联事件的方式

是的,当然,特别是随着jQuery,Prototype等JS框架的兴起,所有这些都鼓励以“新学校”的方式宣布活动。

  

如果是这样,其中一个的好处是什么?

主要原因之一是HTML结构和JavaScript编程智能(可以说属于分离)之间的分离。它使标记更加清晰,更清晰,更易于维护,而所有编程逻辑都保存在单独的文件中,具有加载性能优势以及更好的可维护性 - 您拥有包含代码的适当库,而不是JS代码的片段到处都是。

答案 3 :(得分:0)

使用内联声明,您只能分配一个事件处理程序,而您可以根据需要分配任意数量的代码。此外,如果您需要为多个元素分配相同的事件处理程序,使用javascript更容易,更短,并且您遵守DRY原则。