お世話になっております。
ブラウザの画面項目(テキストボックス等)間でフォーカスを移動する場合、移動元でonblur、移動先でonfocusが発生しますが、移動元のonblurで、特定の条件の場合だけフォーカス移動を抑止し、移動先onfocusを発生させないようにしたいのですが、何か方法はないでしょうか?
【環境】
・IE6
【現在うまくいっていない方法】
現在、フォーカス移動を抑止するため、移動元のonblur内の処理で、「event.srcElement.focus()」を実行してますが、移動先のonfocus()も走ってしまう。(2回フォーカス移動することで元の画面項目にフォーカスが戻る)
【補足】
・問題になっているのは、画面項目のonblur、onfocusで入力値のチェックや他画面項目との連動、色変更、エラーメッセージ表示等を行っておりonblurやonfocusが何度も走ってしまうと想定外の動きをしてしまいます。(場合によってはフォーカス移動の無限ループ)
・グローバル変数を屈指すれば想定外の動きをしないようにすることはできるかと思いますが、それ以外の方法で制御したい。
【現在うまくいっていない方法の動作確認用のとりあえず作ったサンプルプログラム】
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>フォーカス遷移抑止検証</title>
<script type="text/javascript">
var iEventCount = 0;
function onElemBlur() {
if (++iEventCount > 10) return true;// 無限ループ抑止用
debug("blur : " + event.srcElement.value);
event.srcElement.focus();
}
function onElemFocus() {
if (++iEventCount > 10) return true;// 無限ループ抑止用
debug("focus : " + event.srcElement.value);
}
function debug(msg) {
var obElem = document.getElementById("debugmsg");
obElem.innerHTML += msg + "<br/>";
}
</script>
</head>
<body>
<input type="text" value="hoge1" onblur="onElemBlur()" onfocus="onElemFocus()" />
<br/>
<input type="text" value="hoge2" onblur="onElemBlur()" onfocus="onElemFocus()" />
<br/>
<br/>
<br/>
<span id="debugmsg" rows="10" cols="50" ></span>
<br/>
</body>
</html>
長々と申し訳ありません。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
あ~、ていせい。
</head>は、よけいだった。
すうちのちぇっくするのに、もじれつもとおることになっているけど、てきとうになおしてね
ぜんかくくうはくははんかくにしてね。
まだIE6はひつようなのね。
No.1
- 回答日時:
ふぉ~かすがはずれたら、ちぇっくして、えら~があったら、200みりびょうごに、そのようそにふぉーかすをもどしています
<!DOCTYPE html>
<title></title>
</head>
<body>
<form action="">
<p>
<input type="text" value="0" onblur="onElemBlur.call (this, event, check1)">
</form>
<script>
function check1 (str) {
var result = null;
var num;
if (! isNaN (str)) {
num = parseInt (str);
if (num < 0 || 100 < num)
result = '数値が範囲外です';
}
return result;
}
function onElemBlur(event, checker) {
var e = this;
var val = e.value;
var er = checker (val);
if (er) {
alert (er);
setTimeout (function () { e.focus (); e.select ();}, 200);
}
}
</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォーカス移動抑止について
-
乱数を一定時間毎に表示させた...
-
【js】onsubmit属性が変更できない
-
【jquery】EasyUIのSubGridにMy...
-
function の return 値を表示し...
-
「オブジェクトを指定してくだ...
-
iframeの高さ自動調整
-
初心者javascript ウィンドウサ...
-
JavaScriptでのEnterキーとAlt+...
-
<a href="#" …>の意味を教えて...
-
別ファイルのfunctionの読み込み方
-
javascriptとApacheの設定
-
bodyにidをつける理由は何ですか?
-
ウィンドウ名の設定
-
JavaScriptからVBScriptの呼び...
-
window.openで同画面遷移しない
-
openerは使えないのでしょうか?
-
プルダウンと入力を両方行う検...
-
【Google Apps Script】「ライ...
-
町内会での不倫
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SCRIPT5007: 未定義または NULL...
-
JavaScriptでiframeの内容を「...
-
getElementsByNameで要素が取得...
-
フォーカス移動抑止について
-
iframeの中から親ページをスム...
-
function の return 値を表示し...
-
bodyタグのfocus
-
キーを押している間の時間を計...
-
乱数を一定時間毎に表示させた...
-
自動ジャンプでフォームデータ...
-
javascriptでクリックしたリン...
-
XMLHTTPRequestでstatusが0に
-
JavaScript でキーを送る
-
リンク移動先のURLを取得
-
ページ全体を検索して特定文字...
-
htaでVBSのソースを書いたらエ...
-
フレームサイズの変更について
-
「オブジェクトを指定してくだ...
-
マウスオーバーで文字にアンダ...
-
html javascript 作った配列を...
おすすめ情報