A Better Project@はてなダイアリー(インポート版)

基本的にここは更新されません。詳細はaboutへ。

DOM:element.oncopy、oncut、onpaste を翻訳

2008-03-17:イベントハンドラの戻り値の例えの記述を修正
IE 由来の、コピー、切り取り、貼り付け時に発生するイベントハンドラです。Firefox 3 から、Firefox でも利用できるようになります。Safari でも利用できます(参照:http://developer.apple.com/jp/documentation/AppleApplications/Conceptual/SafariJSProgTopics/Tasks/CopyAndPaste.html)。
各ページの例を動かしてみると、イベントハンドラを理解するための良い勉強になると思います。例えば、oncopy は、コピーを防止するためのイベントハンドラとして用いられることが多いですが、イベントハンドラの戻り値を true にすれば、コピーは実行されるということが、oncopy と oncut の例を実行してみることでわかると思います。
つまり、私が理解している範囲で書くと、イベントハンドラの戻り値は、そのイベントを実際に実行するかどうかを指定するものということです。引き金を引いたときに、実際に弾が発射されるかどうかを指定するというようなイメージです(return false は、安全装置のようなものといっても良いかもしれません)。
また、onpaste の例だけ、HTML のイベントハンドラではなく、element.addEventListener メソッドが使われていますが、addEventListener(つまりは、DOM Level 2 Event)で、イベントを実際に実行しないようにするには、event.preventDefault() を使います(「編集内容の要約」欄で Enter キーを押しても、ページが保存されないようにする Greasemonkey スクリプトでも利用しています)。ちなみに、IE では、element.attachEvent メソッドと event.returnValue プロパティの組み合わせです。結局のところ、HTML、DOM Level 2 Event、IE の3 つのイベントモデルがあることになります。DOM Level 2 Event と IE のイベントの違いについては、http://jmblog.jp/archives/169 が詳しいです。