• ベストアンサー

キー押し下げ中に他のイベントを監視する

キーボードのAキーを押し下げた状態でmousedownするとある関数を実行するようにしたいです。  キーボードのonkeydownと、マウスのonmousedownはそれぞれhtmlページ中で監視しています。 これら両方のイベントの発火を条件として関数を実行するように試行錯誤していたのですが、上手くいきません。  どなたかお教えて頂けないでしょうか。 ブラウザはInternetExplorer8です。 クロスブラウザはひとまず置いています。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

同時にイベント処理が呼ばれることはないですから、 例えば、 キーのアップダウンを監視してAキーの状態を、フラグで保持しておく。 マウスダウンイベント処理内で、フラグがonであれば関数を実行。offであればスルー。 といった感じでできるのでは?(逆でも同様ですが) 関数の処理内容によっては、次のイベント(例えばキーアップ)を見逃す可能性もあるので、注意が必要ですが。

yukisin19
質問者

お礼

回答ありがとうございます。 教えて頂いた方法ですんなりできました。 本当に助かりました。 ありがとうございました。

関連するQ&A

  • html内のテキストへのmouseoverイベント

    マウスオーバーのイベントをページ全体で監視して、テキストでそのイベントが発生したときに関数を実行させるようにしたいのですが、ちょっと方法が思いつきません。 テキストリンクなどを除く、そのままのテキスト上でイベントが起こるのを監視したいです。 どなたか分かる方いらっしゃいましたら、お教え願います。 環境はInternetExplorer8です。

  • マウスホイールボタンのイベントをとるには?

    キーが押された時のイベントは、document.onkeydownを、そして、 マウスボタンが押された時は、document.onmousedownイベントで イベントを拾うことができることは知っております。 ところで、マウスホイールの上下スクロールのイベントを拾うには どのようなJavaScript(IE/NN)でコーディングすればよろしいでしょうか?

  • アクションスクリプト イベントメソッド

    お願いします。教えていただきたいのですが、 root.onKeyDown = function() { trace("キーダウン"); } this.onMouseDown = function() { trace("マウスダウン"); } として実行すると マウスダウン と表示されますが、          キーダウン  は表示されません。 一体なにがいけないんでしょうか? 参考になるURLとかあったら教えてください。

  • javascriptでマウスイベントを拾うとき

    javascriptでマウスイベントを拾うときに、 onLoad関数の中で、 document.onmousedown = mydown; として、 function mydown(e) { として、よくマウスイベントのeを 使いますが、このmydown関数へ引数を増やしてわたしたいのですが、 どうやればいいのですか?普通にカッコのなかにわたすようにしても ダメでした。マウスイベントのeがあるためのように思います。 教えてください。

  • TabStripのイベントについて

    VB6にて開発しています。 VB.NETと違い、VB6の[TabStrip]には各ページにコンテナが用意されていません。 そこで、[PictureBox]をコンテナにして、実行時の[Crick]イベントにて [SelectedItem.Index]を参照し、[Visible]プロパティを切り替えて使用しています。 しかしここでひとつ不具合が起こります。 タブをクリック(押下)したままドラッグしてフォーム外でドロップすると、 タブ自体は切り替わりますが、[Crick]イベントが発生しません。 [TabStrip]の[MouseUp]イベント時に[Crick]イベントをコールするという方法で 回避しています。 ですが、そもそも一般のタブは(例えば画面のプロパティ等のタブ) マウスを押した(押下)時点でページが変わります。 これを実現したく、思考錯誤しています。 [Crick]イベントでは、マウスを押して放した時にイベントが発生します。 マウスを押した(押下)時点で切り替えるには、必然的に[MouseDown]時に [Visible]プロパティを切り替えなければいけないと思うのです。 が、イベントの発生順序は[MouseDown]→[Crick]→[MouseUp]という順で発生する為、 どうしても[Crick]時に取得する[SelectedItem.Index]が[MouseDown]時に取得できず、 実現しません。 VB6でマウスを押した(押下)時のページ切り替えを実現する方法はないのでしょうか? [参考] Private Sub TabStrip1_Click() Dim i As Byte With Me For i = 0 To 8 .Picture1(i).Visible = False Next i i = .TabStrip1.SelectedItem.Index - 1 .Picture1(i).Visible = True End With End Sub

  • JavaScriptのonLoadイベントが、発生したり発生しなかったりする。

    ■環境  ・Mac OS X(バージョン10.3.4)  ・Internet Explorer for Mac(バージョン5.2.3) ■詳細  ・HTMLが読み込まれたときにJavaScriptのhogehoge関数を実行させたいため   HTMLの<BODY>タグを下記のように記述している。    <BODY "onLoad=hogehoge()">  ・当該HTMLを読み込んだとき、あるときはhogehoge関数が実行されるが   あるときは実行されない。   →onLoadイベントが発生していないよう。  ・上記現象に再現性なし。  ・他ブラウザでは、当該HTMLのonLoadイベントは必ず発生する。   確認したブラウザは下記の組み合わせ。    ・Mac OS 9(9.2.4) + Internet Explorer 5(5.1.7)    ・Mac OS 9(9.2.4) + Netscape 4.7    ・WindowsXP + IE6.0(SP2)    ・WindowsXP + Netscape 4.77 ■質問  ・上記現象は、Internet Explorer for Mac(バージョン5.2.3)の   既知の障害でしょうか。  ・回避方法(onLoadイベントを必ず発生させる方法)はありますでしょうか。

  • イベントを発生させたウィンドウに通知しない方法は?

    グローバルマウスフックには成功しました。 しかし、フックによって得たイベントを発生させたウィンドウにもそのイベントが通知されます。 (例えば、右クリックをフックしたとしても、カーソル位置のウィンドウのポップアップメニューを開いてしまいます。) これを通知しないようにしたいのです。 しばらく試行錯誤をしましたが、分かりません。 何かよい方法をご存知でしょうか? ご教授願います。

  • キーコードなどでAlt+○を認識してイベントを発生させるには?

    キーコードなどでAlt+○を認識してイベントを発生させるにはどうしたらよいのでしょうか?ひとつのキーでならできたのですが複数のキーを組み合わせることができませんでした。参考までにうまくいかなかったプログラムの関数部分を記述しておきます。このプログラムだと一回目はうまくいくのですが二回目になるとsキーを押すだけで実行されてしまいます。 document.onkeydown=keyDown; function keyDown() { keynum1=event.keyCode; if(keynum1==18)//この番号がキーに対応してる(Altキー) { document.onkeydown=pressEnter; } } function pressEnter() { keynum2=event.keyCode; if(keynum2==83)//この番号がキーに対応してる(sキー) { document.write("キーコード"); } }

  • Perlでイベント処理?

    ようやくPerlに慣れてきて、ふと思ったのですが VBではイベントというものがあり、Perl Tkでもキーボード・マウスのイベントの処理ができる みたいですが、クライアントでソケット受信した場合、いつ受信するかわかりませんので ループしていれば良いのですが、ループしている間は、他の実行が何も出来ず効率も悪いなと 思うようになりました。 WindowsのPerl5.6を使っているのですが、ソケット等、イベント処理できる方法はあるのでしょうか?

    • ベストアンサー
    • Perl
  • Paintイベントが実行できません。。。

    Paintイベントが実行できません。。。  こんにちは、いつも勉強させていただいております。 質問させていただきます。どうぞよろしくお願いいたします。 新年早々とんちんかんな質問でしたら申し訳ございません^^;  開発環境Vista+VB2008になります。  デバッグ開始(再生ボタン)後、Label_E_2.Invalidate()からの Label_E_2.Paintイベントがしょっちゅう実行できなくなるので、 一時停止ボタンを押してみると毎回、別のイベント(Label_E_1.Paint)中の 決まった行が緑色になり、 「このスレッドによって現在の関数が実行された後、次に実行されるステートメントです。」 と表示されます(←理解できておりませんorz)  For Each コントロール In Panel1.Controls   If InStr(コントロール.name, "_E_") Then    コントロール.Image = My.Resources.Btn_E_OFF   End If   ↑この行でございます  Next  毎回この行でPaintイベントが止まっているようなイメージを受けております。 「コントロール」という変数の使い方がまずいのでしょうか。。。? もしかすると解放作業か何か必要になるのかな?などと試行錯誤いたしております。 以前別のプログラムで同じようなコードを作成したときは問題なかったのですが。。。  Googleで検索などいたしましても出てこず、悩んでおります。 どのような現象なのかだけでもアドバイスいただくことができれば嬉しいです。  もしお詳しい方がいらっしゃいましたら,アドバイスいただきたく どうぞよろしくお願いいたします。

専門家に質問してみよう