当我开始做网络开发时,我意识到Javascript事件名称都是小写的,没有分隔符,即:"mousedown "mousedown", "Mouseup"等。而在使用jQuery UI库的时候,我注意到他们也使用了同样的约定,也就是 "dropdeactivate" 如下例
$( ".selector" ).on( "dropdeactivate", function( event, ui ) {} )
虽然这对于只有2个或3个字的名字很好用,但对于上面有更多字的名字就非常糟糕了。
尽管如此,当我必须启动我创建的自定义(合成)事件时,我也遵循了这个惯例,直到最近我决定最好开始使用某种形式的分隔符。现在我使用了类似于 "drop:deactivate"或 "app:ready".
在iOS上,苹果最近为HTML 5 Airplay API添加了这个事件,我同意这篇文章的作者的观点。http:/www.mobilexweb.comblogsafari-ios7-html5-problems-apis-review 当他说。
我认为 "webkitcurrentplaybacktargetiswirelesschanged" 赢得了这个记录。最长的JavaScript事件名称.
这种奇怪的约定背后的原因是什么? 为什么不使用任何形式的分隔符或camelCase约定,以更易读的方式命名事件?
我想这是有原因的,很多聪明的人在这上面下了功夫... 但过了一段时间,我还是想知道为什么?
不幸的是,当你处理遗留的惯例时,就不是那么简单了。而DOM事件的背后有很多历史。
以下是DOM事件的类型属性 事件 是在DOM2事件规范中定义的。
接口事件(在DOM 2级中引入 类型 (DOMString, readonly)
事件的名称(不区分大小写)。该名称必须是一个XML名称。
这背后的原因,我想,在同一个文档中的这段话可以解释。
在HTML 4.0中,事件监听器被指定为元素的属性。[...]为了与HTML 4.0兼容,实现者可以将代表事件处理程序的属性设置视为在EventTarget上创建和注册一个EventListener。
现在,虽然DOM3中的立场已经改变了(事件名称为 区分大小写),我想,最初的方法后来被认为是最安全的赌注--这样就不必依赖用户代理的正确性了(检查一下 本次讨论 和 这个有趣的问题 为例)。)
请注意,W3C自己已经在DOM2中注册了一大堆PascalCased事件(所有的MutationEvents, DOMActivate
, DOMFocusIn
和 DOMFocusOut
).
据我所知,目前还没有关于这个问题的官方实践。在我看来,既然 camelCase 是 js 中普遍接受的名称标准,那么同样也适用于事件命名。然而,正如你所提到的,js本身和许多库都有不同的做法。我看到这两种约定都被伟大的程序员使用,所以我相信这根本是无关紧要的。就 "史上最长的JavaScript事件名 "而言,在我看来,这是一个很好的例子,它应该使用camelCase......或者他们可以把它缩短 :)
如果你想坚持你见过的更多的东西,使用小写。如果你觉得那样很难看(我是这么认为的),就用camelCase。如果你想符合一个标准,我可能不会使用其他任何东西。
我喜欢Bootstrap的工作方式。 hidden.bs.modal
HOWEVER:正如@raina77ow的回答中提到的, 你应该遵循DOM2规范.
该规范提到要遵循XML命名准则。https:/www.w3.orgTR1998REC-xml-19980210#NT-Name
从我收集到的信息来看。
. - _ :
apporlibraryname:componentname.eventtype
我对他的推理是因为有时候你有单独的应用或库,可以是完全独立的小部件。 一目了然,很容易就能识别出这个事情事件的所在,用一个 :
该组件的前面是一个 .
因为大多数组件都是以对象的形式写的。