Javascript/DOM事件名称约定

Javascript/DOM事件名称约定,javascript,dom,dom-events,conventions,Javascript,Dom,Dom Events,Conventions,当我开始进行web开发时,我意识到Javascript事件名称都是小写的,没有分隔符,即“mousedown”,“mouseup”,等等。在使用jQuery UI库时,我注意到它们也使用相同的约定;i、 e.“dropdeactivate”如以下示例所示 $(.selector”).on(“dropdeactivate”,函数(事件,ui){} 虽然这对于只有2到3个单词的名字来说效果很好,但是对于有更多单词的名字来说却非常糟糕 尽管如此,当我必须触发我创建的自定义(合成)事件时,我也遵循了这

当我开始进行web开发时,我意识到Javascript事件名称都是小写的,没有分隔符,即“mousedown”“mouseup”,等等。在使用jQuery UI库时,我注意到它们也使用相同的约定;i、 e.“dropdeactivate”如以下示例所示

$(.selector”).on(“dropdeactivate”,函数(事件,ui){}
虽然这对于只有2到3个单词的名字来说效果很好,但是对于有更多单词的名字来说却非常糟糕

尽管如此,当我必须触发我创建的自定义(合成)事件时,我也遵循了这个约定,直到最近我决定最好开始使用某种形式的分隔符。现在我使用类似于“drop:deactivate”,或“app:ready”

在iOS上,苹果最近为HTML5AirPlayAPI添加了这个事件,我同意这篇文章的作者所说的:

我认为“WebKitCurrentPlaybackTargetSwirelesChanged”赢得了记录:有史以来最长的JavaScript事件名称

这种奇怪约定背后的原因是什么?为什么不使用任何形式的分隔符或camelCase约定来以更可读的方式命名事件


我认为这是有原因的,很多聪明的人都在做这件事。。。但过了一段时间,我仍然想知道为什么?

据我所知,在这个问题上没有官方惯例。在我看来,由于camelCase是js中普遍接受的名称标准,因此事件命名也同样适用。然而,正如您所注意到的,js本身和许多库则不然。我见过伟大的程序员使用这两种约定,所以我认为这根本不重要。在“有史以来最长的JavaScript事件名”的例子中,我认为这是一个应该使用camelCase的事件的好例子……或者他们可以将其缩短:)


如果您想坚持您经常看到的内容,请使用小写字母。如果你认为这对眼睛很难(我也这么认为),就用camelCase。如果你想遵守一个标准,我可能不会使用其他任何东西。

说到约定,这是一种方式或另一种习惯,JavaScript框架似乎遵循JavaScript DOM事件API的约定,我不知道是否有原因或至少有明确的理由,但事实就是如此。
对于一般约定,是最好的参考之一,但没有提到事件命名,但同时事件似乎有点不同,这使我认为这是一个选择问题,没有更多,也没有更少

不幸的是,当处理遗留约定时,它不是那么简单。DOM事件背后有很多历史

以下是在DOM2事件规范中如何定义的属性类型:

接口事件(在DOM级别2中引入)
类型(属于DOMString类型,只读)

事件的名称(不区分大小写)。该名称必须是XML名称

我想,同一份文件中的这一段解释了这一点背后的原因:

在HTML4.0中,事件侦听器被指定为 元素。[…]为了实现与HTML 4.0的兼容性, 实现者可以查看表示事件的属性设置 在上创建和注册EventListener 事件目标

现在,虽然DOM3中的立场发生了变化(事件名称在DOM3中),但我认为最初的方法通常被认为是最安全的赌注——因此不必依赖于用户代理的正确性(检查并作为示例)


请注意,W3C本身已经在DOM2中注册了大量的PascalCased事件(所有的突变事件,
DOMCATIVATE
DOMPOCUSIN
DOMPOCUSOUT
)。

我喜欢引导程序的工作方式:
hidden.bs.modal

然而: 正如@raina77ow的回答中提到的,您应该遵循DOM2规范

规范提到了以下XML命名准则:

从我收集的信息来看:

  • 如果可能,请使用小写
  • 您可以使用这些字符中的任何一个来帮助命名空间
    -\
  • 我会用任何一个。可能是这样的
    apporlibraryname:componentname.eventtype
我对他的理由是,有时候你有独立的应用程序或库,它们可以是完全独立的小部件。通过
组件在
之前,因为大多数组件都是作为对象编写的,所以一眼就可以很容易地确定这个事件的位置

这些应该被称为“PascalCased”吗?很多聪明人都在做这个。。。你对他们有太多的信心,那么多错误的选择已经在网络标准中被做了!