プロが教える店舗&オフィスのセキュリティ対策術

画像をボタンのようにフォーカス対象にする。

現在、画像にonclick,onmouseover,onmouseoutイベントを設け、
ボタンとして機能を持たせて、html画面を作成しております。

htmlソース
<IMG id="logout_btn" onmouseover="Onmouseoverlogout();"
 onmouseout="Onmouseoutlogout();"
 onclick="clicklogout();"
 img src="images/logout.gif"
 width="100" height="27" border="0" name="logout_btn">

これを、キーボード操作だけでも押せるようにしたいのです。
この目的を果たす為には、
1.Tabキーが押された時に移り変わるフォーカス対象の中に加える
(画面の中には他に幾つかのテキストボックスやコンボボックスがあります)
2.Enterキーが押された時のイベントを設定する。

この2項目を実現する為にはどうすればよいのでしょう?

特に2は、Enterキーを押した時にフォーカス状態にある対象を判別する
⇒それによって実行する関数を選ぶif分岐を作る、といった手順が必要かなと想像しています。
(フォーカスされている画像が、「ログイン」ボタンだったらSubmit関数を呼び、
 「リセット」ボタンだったら全項目をブランクにするコードを走らせる、等…)


フォーカス対象、などのキーワードで検索しても別の事例が検索できてしまい
なかなか解決できません。
Web製作1ヶ月の初心者で、基本的な事を聞いてしまっているかもしれませんが
ご助力いただけましたら幸いです。

A 回答 (1件)

なんか、もっと素直な作り方があると思いますけれど…


(HTMLで用意されているものを、そのまま利用したほうが良いと思う)

>1.Tabキーが押された時に移り変わるフォーカス対象の中に加える
スクリプトで特殊制御するよりも、form部品を利用するほうが賢いと思われます。
(そうでないと、formの制御全体を作成することになりかねない)

>2.Enterキーが押された時のイベントを設定する。
<input type=image>を利用してあげれば、Enterとclickが同じイベントで取得できるけれど、他のテキスト入力欄でEnterキーを押したときにsubmitの代表としてこの要素でイベントが発生したことになってしまうみたい。
これを区別するためにダミーでサブミットボタンを作ってみたところ、区別は可能になったが、非表示にしたとたんIEはそのボタンを無視してくれる。

しかたが無いので、keyイベントで識別。
これだとclickについてはまた別に制御する必要がある。(省略)
(Enterキーでsubmitが発生するので、適当に制御する必要あり)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head><title>test</title>
<script type="text/javascript">
<!--
function test(evt) {
if (evt.keyCode != 13) return;
var t = evt.target || evt.srcElement;
if (t.nodeName == 'INPUT' && t.type == 'image') alert(t.name);
return;
}
-->
</script>
</head>
<body>
<form action="" method="" onkeydown="test(event)">
<input type="text" name="i1" value="">
<p>LogIn: <input type="image" name="log_in" src="btn1.gif">
<p><input type="text" name="i2" value="">
<p>LogOut:<input type="image" name="log_out" src="btn2.gif">
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

fujillinさん、ありがとうございます。

>スクリプトで特殊制御するよりも、form部品を利用するほうが賢いと思われます。
ですよね。。(汗
ここは素直にボタンを
<input type="button" onclick="...">
等で書き直すようにします。
(何で前の人はボタンを全部画像にしたんだろう。。)

>Enterキー押下時イベント
サンプルつきの回答、ありがとうございます。
区別の部分は少々難しそうですが、
それだけにこの回答は理解の助けとなりそうです。

ありがとうございます。
解決後、再度返信します。

お礼日時:2010/04/02 14:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!