1

这听起来有点像初学者的问题:您可以通过addEventListener attachEvent或附加事件处理程序$().event(handler)

或者您可以通过分配属性 onclick 来做到这一点

<a onclick="doSomething()"/>

所以我想知道使用属性方法是否有什么特别的错误。这听起来不对,但我看不出它会如何阻碍任何事情。特别是因为它使传递参数变得非常容易

关注点分离将是不这样做的一个很好的理由。我为初学者举办了一个关于 jQuery 的研讨会,所以我一直在寻找其他一些问题,以便我可以提供给人们。“因为我这么说”不是我的风格。我知道这听起来像是一个开放式问题,但我很确定有明确的理由不这样做。

4

4 回答 4

7

为什么内联绑定事件不好

  • 当您想要进行一些更改时,很难维护代码
  • 如果代码很大,则无法缓存您的代码(原因在评论部分解释)
  • 你不能重用你的事件处理程序
  • 你混淆了content layerbehaviour layer这使你的代码缺乏逻辑
  • 事件处理程序将evalglobal命名空间中执行,这是您在 JavaScript 中必须避免的两件事
  • 很难支持无javascript的情况,progress enhancement很难

所以

始终在外部添加 .js 文件和 .css 文件,并使用框架绑定事件以使您的代码跨浏览器工作。

进一步阅读

为什么内联 CSS 和 JavaScript 代码如此糟糕

不显眼的 JavaScript

网页开发的三层

进度增强

于 2013-09-18T13:03:00.820 回答
3

这称为不显眼的 JavaScript。Unobtrusive JavaScript 的目标是:

  1. 将功能(“行为层”)与网页的结构/内容和表示分离
  2. 避免传统 JavaScript 编程问题的最佳实践(例如浏览器不一致和缺乏可扩展性)
  3. 逐步增强以支持可能不支持高级 JavaScript 功能的用户代理

基本上,如果用户代理不支持 JavaScript,它永远不会知道它的存在。

于 2013-09-18T12:57:37.830 回答
0

简单来说,这样做并没有什么“错误”。将标记、样式和脚本分开在语义上是一种很好的做法。因此,内联样式不是“错误”但不是一个好的做法的原因相同。

于 2013-09-18T12:58:13.087 回答
0

最后归结为关注点分离使用高级模型可以完成的大多数事情也可以使用内联事件属性完成- 它们只会变得更加复杂:

  • 您可以绑定多个侦听器 ( onclick="doA(); doB()"),但您需要在之前了解所有侦听器
  • 当动态生成此类属性时(例如在 HTML 字符串中),您必须使用代码字符串
  • 要调用外部函数,它们必须在全局范围内

如果您不使用内联事件,它会简化编码/维护代码,允许更好的程序设计(并促进渐进式增强),并减小文件大小。

具有DOM 属性的传统模型onEvent确实处理了最后两点。在同一个元素上分配多个监听器(相同类型)是可能的(即使彼此不认识),但仍然非常麻烦。

高级事件绑定addEventListener允许更大的灵活性。您不需要照顾其他事件侦听器(除了停止传播),它允许以前不可能的一件事:在捕获阶段处理事件。

于 2013-09-18T13:35:38.840 回答