テキストボックスへの入力値を即時でチェックし、値が不正だった場合はそのテキストボックスから抜けれないようにしたいと考えています。
以下のコードはIE6、Opera8.5では動作しましたが、Firefox1.5ではalertとselectはされるものの、focusがされず、結果テキストボックスから抜けてしまいます。
Firefoxで上記のことをするにはどうしたらよいのでしょうか。
<html>
<head>
<script type="text/javascript">
function validate(e){
var t = document.getElementById("txt1");
if(t.value == "a"){
alert("だめ!!");
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
t.select();
t.focus();
return false;
}
}
function bodyOnLoad(){
var t = document.getElementById("txt1");
addListener(t, "change", validate, false);
}
function addListener(e, evtname, func, foo){
if(e.addEventListener){
e.addEventListener(evtname, func, foo);
}else if(e.attachEvent){
e.attachEvent("on" + evtname, func);
}
}
</script>
</head>
<body onload="bodyOnLoad();">
<input type="text" id="txt1">
<input type="text" id="txt2">
</body>
</html>
No.1ベストアンサー
- 回答日時:
なんかずいぶん仰々しいコードですが、
onblurの制御だけでじゅうぶんでは?
ちなみにテストしてみたところfirefoxは
focusがほかに移る処理が他のブラウザと
異なるようで、一度別対象を必ずフォーカス
しないといけないみたいですね。
バグなのか仕様なのかわかりません。
姑息ですが、settimeoutを使うと解消できそうです
以下のソースでどうでしょうか?
<html>
<head>
<script type="text/javascript">
function bodyOnLoad(){
t1 = document.getElementById("txt1");
t1.onblur=function(){
if(t1.value == "a"){
alert("ダメ")
setTimeout("t1.focus()",0);
}
}
}
</script>
</head>
<body onload="bodyOnLoad()">
<input type="text" id="txt1">
<input type="text" id="txt2">
</form>
</body>
</html>
この回答への補足
ご回答ありがとうございます。setTimeoutで何とかなりそうですのでもう少しテストしています。
ちなみに説明不足でしたが「仰々しい」のにもそれなりの理由がありまして・・・。
作ろうとしているのは汎用的なスクリプト部品で、提示したのは問題の箇所を単純化して抽出したコードです。汎用部品ですから、"onblur=..."を使ってしまうと、部品を使う側で異なるイベントハンドラを定義できなくなります。
その点リスナーならば他のリスナーを追加することも、onXXを使うこともできますのでずっと柔軟です。
<html>
<head>
<script type="text/javascript">
function validate(e){
var t = document.getElementById("txt1");
if(t.value == "a"){
alert("だめ!!");
if (e.preventDefault) {
e.preventDefault();
} else {
e.returnValue = false;
}
t.select();
setTimeout(function(){t.focus()}, 0);
return false;
}
}
function bodyOnLoad(){
var t = document.getElementById("txt1");
addListener(t, "blur", validate, false);
}
function addListener(e, evtname, func, foo){
if(e.addEventListener){
e.addEventListener(evtname, func, foo);
}else if(e.attachEvent){
e.attachEvent("on" + evtname, func);
}
}
</script>
</head>
<body onload="bodyOnLoad();">
<input type="text" id="txt1" onblur="alert('ユーザー定義の処理');">
<input type="text" id="txt2">
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
追加ボタンを押した際に ok ボ...
-
フォームが空欄の時にフォーム...
-
GASに文字列として関数を入れる...
-
特定の文字列を複数抜き出した...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
①入力フォーム→②確認表示画面→③...
-
Q&A掲示板の入力フォームに文字...
-
ボタンを押したあとに画像を表...
-
コードレビューをお願いします。
-
React hooksが値を返して配列変...
-
フロントエンドフレームワーク...
-
画面遷移を行わずに同一ページ...
-
ローディングアニメーションの...
-
jQueryで同じクラス名のものを...
-
ジャバスクリプトについて。
-
プログラムについて。
-
メールフォームの日付入力フォ...
-
二次元配列を使って順位をだす...
-
iOSのみダブルタップが必要
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
二次元配列を使って順位をだす...
-
プログラムについて。
-
Q&A掲示板の入力フォームに文字...
-
メールフォームの日付入力フォ...
-
iOSのみダブルタップが必要
-
ジャバスクリプトについて。
-
画面遷移を行わずに同一ページ...
-
特定の文字列を複数抜き出した...
-
指定時間になったら、WEBサイト...
-
追加ボタンを押した際に ok ボ...
-
①入力フォーム→②確認表示画面→③...
-
スマホ上で、左右スワイプで次...
-
読み込んだQRコードをフォーム...
-
フロントエンドフレームワーク...
-
React hooksが値を返して配列変...
-
GASでGoogleフォームの自動返信...
-
初心者です。gulpでコンパイル...
-
階層別の組織図の自動作成について
-
HTMLで作った時報アプリが動き...
-
jQueryで同じクラス名のものを...
おすすめ情報