web-dev-qa-db-ja.com

javascript / DOMイベント名の規則

こんにちは、私がWeb開発を始めたとき、JavaScriptイベント名がすべて小文字で、区切り文字なしであることに気付きました。 "mousedown" "mouseup"など。また、jQuery UIライブラリを操作するときに、同じ規則を使用していることに気付きました。つまり、次の例のように "dropdeactivate"

javascript $( ".selector" ).on( "dropdeactivate", function( event, ui ) {} )

これは、2語または3語のみの名前に対してはうまく機能しますが、より多くの単語が含まれる名前に対しては本当にひどいです。

これにもかかわらず、私が作成したカスタム(合成)イベントを起動する必要があるときも、この規則に従いました。最近まで、何らかの形のセパレーターを使用することをお勧めしました。 "drop:deactivate"、または "app:ready"

on iOS Apple最近、このイベントをHTML 5 Airplay APIに追加しました。私はこの投稿の執筆者に同意します http://www.mobilexweb.com/blog/safari- ios7-html5-problems-apis-review 彼が言うとき:

"webkitcurrentplaybacktargetiswirelesschanged"が記録を獲得したと思います:これまでで最も長いJavaScriptイベント名

この奇妙な規則の背後にある理由は何ですか?より読みやすい方法でイベントに名前を付けるために、セパレータまたはキャメルケースの規則の形式を使用しないのはなぜですか?

その理由はあると思いますが、多くの賢い人がこれに取り組んでいました...でもしばらくしてから、なぜ私はまだ疑問に思っていますか?

40
roy riojas

残念ながら、レガシー規約を扱う場合、それほど単純ではありません。そして、DOMイベントにはその背後に多くの歴史があります。

Event のtype属性がDOM2 Events仕様でどのように定義されているかを次に示します。

インターフェイスイベント(DOMレベル2で導入)
type(タイプDOMString、読み取り専用)

イベントの名前(大文字と小文字は区別されません)。名前はXML名でなければなりません。

これの背後にある理由は、同じドキュメントのこの段落で説明されていると思います。

HTML 4.0では、イベントリスナーは要素の属性として指定されていました。[...] HTML 4.0との互換性を実現するために、実装者はイベントハンドラーを表す属性の設定を、EventTargetでのEventListenerの作成および登録として表示できます。 。

現在、スタンスはDOM3で変更されていますが(イベント名は case-sensitive です)、元のアプローチは、おそらく最も安全な方法であると考えられているため、依存する必要はありませんユーザーエージェントの正しさについて(例として このディスカッション および この面白い問題 を確認してください)。

W3C自体が多数のCamelCasedイベントをDOM2に登録していることに注意してください(すべてのMutationEvents、DOMActivateDOMFocusInおよびDOMFocusOut)。

23
raina77ow

私の知る限り、その主題に関する公式の慣行はありません。 camelCaseはjsでの名前の一般に受け入れられている標準であるため、同じことがイベントの命名にも当てはまるように思えます。ただし、お気づきのとおり、js自体と多くのライブラリはそれ以外の場合に実行します。優れたプログラマーが使用する両方の規則を見てきましたので、それは単に取るに足らないことだと思います。 「これまでで最も長いJavaScriptイベント名」の場合、これはcamelCaseを使用するべきであったイベントの良い例です。私の意見では...または、おそらくそれを短くしただけかもしれません:)

あなたがもっと頻繁に見たものに固執したいなら、小文字を使ってください。目には難しいと思うなら(私はそうです)、キャメルケースを使用してください。あなたが標準に準拠しようとしているなら、私はおそらく他のものを何も使用しないでしょう。

6
m59

慣習に関しては、それは何らかの形で、習慣ですが、JavaScriptフレームワークはJavaScript DOMイベントAPIの慣例に従っているようですが、理由があるのか​​、少なくとも明確な理由があるのか​​わかりませんが、それだけです。一般的な慣習では、 crockford は最も優れたリファレンスの1つですが、イベントの命名については言及されていませんが、同時に here イベントは少しのようです違い、私はそれを選択の問題として考えました、これ以上でもそれ以下でもありません

1
Labib Ismaiel