blur イベントが TAB キーによって発生したのか否かを JavaScript で捕らえる方法はありますでしょうか?

ブラウザを限定する必要があれば IE6/7 優先でお願いします。また、 prototype.js の有無は問いません。

回答の条件
  • 1人50回まで
  • 登録:2007/07/29 12:44:11
  • 終了:2007/08/01 00:30:21

ベストアンサー

id:susie-t No.1

susie-t回答回数99ベストアンサー獲得回数182007/07/30 02:10:44

ポイント100pt

blurイベント単体で捕らえるのはたぶん無理なので、onkeydownイベントで直前のキーコードを保持しておき、blurイベントでそれがTAB(=9)かどうかを判断するという方法が考えられます。

【例】
<html>
<head>
<title></title>
<script>
<!--
function test(id){
  var elem = document.getElementById(id);
  var lastCode = null;
  elem.onblur = function(event){
    if(lastCode == 9){
      alert("TABによりフォーカスが外れました")
    }
    lastCode = null;
  };
  elem.onkeydown = function(event){
    event = event || window.event;
    lastCode = event.keyCode || event.which;
  };
  elem.onkeyup = function(event){
    lastCode = null;
  };
}

window.onload = function(){
  test("input1");
  test("input2");
}
//-->
</script>
</head>
<body>
<input type="text" id="input1"/>
<input type="text" id="input2"/>
</body>
</html>

上記の関数testに入力要素のIDを指定して実行すると、onkeydown、onblur、onkeyupイベントにそれぞれ関数を指定します。入力要素からTABで遷移するとalertを表示します。マウスで遷移した場合は表示しません。WinXP+IE、Firefoxで確認しました。

参考になれば幸いです。

id:kamiochiai

やはり keyCode を捕らえるしかないのですね…本当は手抜き方法があるんではと思っていたのですが、これで疑念が晴れました。

ありがとうございます!

目的としては TEXTAREA の内容に応じて、 TAB キーの遷移先を変えるというインターフェースを作ろうと思っていました。

この方法ですんなり書けそうです。

2007/07/31 02:44:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません