WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:イベントを破棄する、イベントを生成するには?

0:[投稿] 黒い汗 [2003/05/14 11:59 ][環境:IE6,NN7,WinXP なんでも]

[F1]キーを押したときに、ブラウザのヘルプではなく、ヘルプページを別ウィンドウで表示するようにしたいのですが、onkeydownで拾った後、return falseにしてもブラウザのヘルプが開いてしまいます。
これを無効にするために、JavaScript内でイベントを破棄できないでしょうか?

また、IEではアンカーに対してclickメソッドがありますが、Mozillaにはないので、dipatchEventを使いたいのですが、発生しているイベントはkeydownで、実行したいのがマウスクリックイベントなので、引数をどうすればよいのかわかりません。これもイベントを生成する方法があれば解決すると思うのですが、何か良い手はありませんか?


1:[回答] ween [2003/05/14 14:49 ]

IE には onhelp イベントがあるのでこれを拾って false を返せばよいでしょう。

>発生しているイベントはkeydownで、実行したいのがマウスクリックイベント
単に F1 を押したらヘルプページを別窓で表示したいというだけなら、 onkeydown から window.open を呼ぶなどすればいいような気もします。

click イベントを任意のアンカー上で発生させないと都合が悪いということなら、 DOM2 では document.createEvent を使います。
生成したイベントを initEvent メソッド等で初期化して
ターゲットに送る、という流れになります。

<a id="sample" href="#" onclick="alert('OK')">Sample</a>
<script type="text/javascript">
// keydown イベントで実行
onkeydown = function () {

 // MouseEventを生成
 var e = document.createEvent('MouseEvents');

 // 生成したイベントの各プロパティを初期化
 // MouseEvent の初期化は initMouseEvent で行う
 e.initMouseEvent(
   'click', // type
   true, // bubbles
   true, // cancelable
   window, // view
   1, // detail
   0, // screenX
   0, // screenY
   0, // clientX
   0, // clientY
   false, // ctrlKey
   false, // altKey
   false, // shiftKey
   false, // metaKey
   0, // button
   null // relatedTarget
 );

 // イベントをターゲットに送る
 document.getElementById('sample').dispatchEvent( e );

}
</script>


2:[質問] 黒い汗 [2003/05/15 09:20 ]

丁寧な回答ありがとうございます。
Mozillaで動作確認しました。(IEはだめなのですね)
あとこの情報の参照元を教えていただけるとありがたいのですが。

もうひとつ、ヘルプについてはIEでonhelpの設定で無効にすることはわかったのですが、ヘルプに限らず、イベントをアプリに渡さないようにはできないのでしょうか?


3:[回答] ween [2003/05/15 10:47 ]

>(IEはだめなのですね)
IEでも任意の要素上に任意のイベントを発生させることはできますが、DOM2Eventsとはイベントモデルが異なるのでコードの互換性は全くありません。
IEの場合はcreateEventObject()やfireEvent()を使うことになります。

createEventObject
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/createeventobject.asp
fireEvent
http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/fireevent.asp

>あとこの情報の参照元を教えていただけるとありがたいのですが。
仕様はこちらになります。

DOM Level 2 Events
http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/
一部の訳:
http://www2u.biglobe.ne.jp/~oz-07ams/prog/dom-ref/Events/index.html

>ヘルプに限らず、イベントをアプリに渡さないようにはできないのでしょうか?
できるイベントもあるし、できないイベントもあります。
DOM2仕様で "Cancelable: Yes" とされているイベント、またIEでは下記URLからリンクしている各イベントの解説で "Cancels Yes" とされているものについてはイベントのデフォルトアクションを取り消せますが、そうでないイベントについてはまず無理でしょう。
http://msdn.microsoft.com/workshop/author/dhtml/reference/events.asp


4:[完了] 黒い汗 [2003/05/15 11:31 ]

いろいろとありがとうございました。

やりたいことはほとんどできるようになったので、
あとは上記の情報を元に自分で調べてみます。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World