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

在javascript中附加事件

  •  3
  • Roman  · 技术社区  · 16 年前

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

    …通过使用一个内联的“onclick”,您正在做一个类似的事情,但是它更难维护,更容易出现问题。 作为一个整体,JavaScript社区已经从内联JavaScript转移了一段时间。

    这是指使用

    $("#someID").click(function(){
        do something here...;
    });
    

    而不是

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

    有没有真正的转变 老派 以内联方式声明事件,如果是这样,那么其中一个的好处是什么?

    编辑 我想这可能有助于包括一个参考 original question . 它询问如何将不同的单击事件附加到每个选项卡。 我的回答是废话,我是否欠费伦雷恩一个道歉。

    4 回复  |  直到 16 年前
        1
  •  4
  •   rosscj2533    16 年前

    最大的好处是内容(HTML)和操作/行为(javascript)的分离。这被称为 Unobtrusive javascript . 将它们分开可以更容易地进行更改而不影响另一个。

        2
  •  4
  •   Nick Craver    16 年前

    是的,至少在社区的某些部分,还不确定如何衡量整体情况。

    一定地 我的优势:

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

    从纯粹的数量来看,想想这个:

    <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() 用途,更复杂)

        3
  •  3
  •   Pekka    16 年前

    是否真的有一个转变,从旧的学校方式,宣布事件在线

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

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

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

        4
  •  0
  •   Giorgi    16 年前

    通过内联声明,您只能分配一个事件处理程序,而通过代码,您可以分配任意多个事件处理程序。另外,如果您需要将同一个事件处理程序分配给多个元素,那么使用JavaScript更容易、更简短,并且遵循DRY原则。