在我回答下面这样的问题: 是什么事件约束力的意思吗?, 我做了一个路过的话,使用内联JavaScript/提早结合对绑JavaScript的事件是'经常错误'

例如:

<input id="MyButton" type="button" value="clickme" onlick="Somefunction()" />

我认为'迟到结合的方法在没有JavaScript中引用该标记,这我理解来建立最佳做法。但是,评论者称,在有些情况下,需要其使用,并且我想知道这些可能是。

没有参与讨论的相对优点,任何人都可以想到的任何情况下,决定使用(例如) onclick 属性在晚结合的方法。

非常感谢

有帮助吗?

解决方案

我认为许多开发人员将这样做要么由于无知或缺乏知识(其当然是常见的),剩余的开发人员将这样做,因为它只是更便于使用HTML-JS属性比迟到结合,如果你知道某些对象和功能总是装在每一页上,他们只会'要那里'。

我觉得这是 尤其是 真的当说HTML来自阿贾克斯回调。举个例子,在那里AJAX请求回来HTML响应和HTML插入网页。现在的幼稚的开发人员会认为沿着这些线:

  • 我不知道是什么因素是内,响应HTML所以我不知道什么迟到绑定,我需要添加。
  • 也许我需要加入他们所有的只是以防万一!或者写了一些分析的脚本中检测到的元素结合到那些我找到的?
  • 但是,如果我需要结合到东西已经不存在吗?时间去写一些长期内联JavaScript!

所有这一切都可以消除通过使用一种无所不在的结合,适用于所有当前的 未来的页面上的元素。在jQuery,相当于是 live().而不是文字:

$('.foo').click(function(){...});

你可以写:

$('.foo').live('click', function(){...});

现在,所有元素用类名"foo"执行功能的时候,点击, 包括的要素,目前不存在.非常有用的动态阿贾克斯的接口。

你可能已经知道了,但我仅指出,任何东西JS属性可以做的,纯JS可以做得更好,我会考虑的最佳实践。

其他提示

评论者断言,有时需要使用它

我想我是其中之一。我实际上是说,内联监听器“ 在某些情况下是一个合理的选择”。我认为在任何情况下它都是“必需的”(我理解为“必需”)。

添加内联侦听器只是在服务器上应用与添加在客户端上相同的逻辑来添加侦听器,并且具有以下优点:

  1. 可以创建和缓存标记,也可以将其用作静态页面,并不是每个客户端在下载页面时都会一遍又一遍地添加侦听器
  2. 与元素之间的延迟和由DOMReady或onload函数或“底部脚本”添加的侦听器之间的延迟有关的问题已完全消除
  3. 具有onload后备功能的各种“跨浏览器” DOMReady函数的变数已被删除-如果不使用这些函数,这些函数将无法添加监听器。

    当然,这并不意味着应该将所有侦听器都内联添加,并且动态添加侦听器是垃圾,我只是指出这是解决某些问题的可行方法,并且在许多情况下都是一种完美的合理解决方案案例。

    如果您认为侦听器的“早期绑定”是好的,那么请尽早进行-内联。 :-)

    PS。我还认为我说我不喜欢在这种情况下使用“绑定”,因为侦听器没有真正意义上的元素绑定。它们只是元素接收相关事件时调用的函数。绑定的唯一类型是可以将侦听器的this关键字设置为引用相关元素(对于所有内联侦听器,此元素在所有浏览器中都是一致的,但对于以后添加的元素则不一定如此)。

为什么onclick属性不好:

onclick="foo()"

  • 您传递的代码字符串在单击元素时在运行时被评估。这是低效的,并使用了eval的恐怖手段
  • 您被迫将函数foo存储在全局范围内,从而用所有事件处理逻辑污染全局范围。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top