• ベストアンサー

focus()が上手くいかない

困っています、助けてください。 フォームのテキストボックスの入力された文字数をチェックし、 サイズオーバーなら、アラートを表示し、テキストボックスにフォーカスを移動させたい。 のですが、上手く動いてくれません。 コードは次の通りです。どこがおかしいのか?どうすれば改善できるのか? 教えてください。 <form method="post" action="#"> <input type="text" name="fmTitle" onBlur="checkText(this)"> </form> <script type="text/javascript"> <!-- function checkText(aText) { if (aText.value.length > 100) { alert('サイズオーバーです'); aText.focus(); } } //--> </script>

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

  • ベストアンサー
回答No.2

こんにちは。 こちらの環境で上のソースそのままをコピーして確認したところ、普通に動きましたよ(^^ こちらはWinXPSP2/IE6.0です。 半角全角ともに100文字を超えると(101以上)だとアラートが出て、フォーカスがfmTitleに戻りました(ちなみにテキストボックスを2つ以上に増えても問題なくその箇所に戻りました)。 考えられることはJavaScriptが無効になっているとかですが…(私は最初情報バーに邪魔されました^^;)そういうことはないと思いますし、もしよければ確認環境と、どのように動かないのか(文字数が100文字以下なのにアラートが出る/100文字を超えてもアラートが出ない/アラートは出るのにフォーカスが移動しない等…)教えていただければ、もう少しお手伝いが出来るかもしれません。

xyz_1990
質問者

補足

ご回答ありがとうございます。 #4の補足欄のような状況で、FireFoxの問題のようです。 対策方法等ご存知でしたら、ご教授願います。

その他の回答 (3)

  • daisy_k
  • ベストアンサー率25% (1/4)
回答No.4

xyz_1990さん、こんにちは。 > 上手く動いてくれません。 というのは、具体的にはどのような動きになるのでしょうか? JavaScript エラーが発生する、ということでしょうか? そうであれば、ステータスバーの左に出る、警告のアイコンをクリックすると、エラーの詳細が分かるかと思います。 どのように動作しないのか、もう少し詳細な情報を頂ければ、回答しやすいかと思います。 ちなみに、載せて頂いたソースをそのままコピペして、それぞれ headタグ、bodyタグに埋め込んで動作確認してみましたが、わたしの環境では正常に動きましたよ。 (「正常に」と申しましても、xyz_1990さんが求めている動きと合っているかどうかの保証はありませんが…) わたしの動作環境は IE6 SP2 です。

xyz_1990
質問者

お礼

質問内容が変わってきたので、 この質問は一度締め切り、 新規に質問を作成しようと思います。 皆様、どうもありがとうございました。

xyz_1990
質問者

補足

ご回答ありがとうございます。 正常に動かないというのは、 テキストエリアにフォーカスが行かないということです。 ただ、作動環境がFireFoxだったのですが、 IEで試したら、上手くフォーカスされました。 どうも、FireFoxの問題の様です。 FireFox用の対策ってあるのでしょうか?

  • VCAT
  • ベストアンサー率20% (16/79)
回答No.3

こんな感じじゃないですか? <form method="post" action="#"> <input type="text" name="fmTitle" onBlur="checkText(this.form)"> </form> <script type="text/javascript"> <!-- function checkText(aText) { if (aText.fmTitle.value.length > 100) { alert('サイズオーバーです'); aText.fmTitle.focus(); } } //--> </script> --------------- しかし、100字もあるならtextareaの方がよいような

xyz_1990
質問者

補足

ご回答ありがとうございます。 #4の補足欄に書いたような状況です。 ゆくゆくは、複数のテキストエリアに、チェック機能をつけたいので、テキストエリアを指定したいのです。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんちくは。 んー。いつも「this」を使わないんでイマイチですがー。。。 どこのthisか、システム上不明になってる。。。って事ないですか? フォーム名が指定されてませんので、「aText」の名前を探しに行って行方不明になったとか。。。 ちなみに、thisを使わなくても。。。 <form method="post" action="#" name ="form"> <input type="text" name="fmTitle" onBlur="checkText()"> </form> <script type="text/javascript"> <!-- function checkText() { if (document.form.value.fmTitle.length > 100) { alert('サイズオーバーです'); document.form.fmTitle.focus(); } } //--> </script> でできるかと。 this使ったほうはよう分かりませんが、フォーム名をつけて 「document.form.aText.focus();」 とかじゃダメですかね?

xyz_1990
質問者

補足

ご回答ありがとうございます。 #4の補足欄のような状況です。 コード自体は良さそうです。 質問する前に、IEで試して見るべきでした。 FireFoxの問題のようです。対策方法ご存知でしたら、ご教授願います。

関連するQ&A

  • FireFoxでfocus()が上手く動かない

    javascriptを使って、 フォームのテキストエリアの入力文字数をチェックし、 オーバーしていれば、アラートを出し、テキストエリアにフォーカスを移動させる。 ようにしようとしています。 IEでは動いてのですが、FireFoxだと上手くフォーカスが移動してくれません。 どこがまずいのか、教えてください。 コード <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function checkText(aText) { if (aText.value.length > 1) { alert('サイズオーバーです'); aText.focus(); } } //--> </script> </head> <body> <form method="post" action="#"> <input type="text" name="fmTitle" onBlur="checkText(this)"> <input type="text" name="dummy"> </form> </body> </html>

  • textbox内の文字数を判別しfocusを移動させる

    textbox内の文字数を判別しfocusを移動させるプログラムを書いたのですが、2つ目のtextboxから記入したりするとうまく動作しません。どうしたらいいのでしょうか?カーソルがどのtextboxにあるか(どのtextboxにfocusしているか)を参照しようとしたのですがそのような関数はあるのでしょうか?教えてください。 <html> <head><title>checkLength</title> <script language="JavaScript"> <!-- document.onkeyup=checkLength; function checkLength() { if(document.form1.text1.value.length==3) document.form1.text2.focus(); if(document.form1.text2.value.length==5) document.form1.text3.focus(); } //--> </script> </head> <body bgcolor="#ffffff"> <form name="form1">半角英数で入力してください。<br> 1...<input type="text" name="text1" size="7"> 3文字入力するとカーソル移動<br> 2...<input type="text" name="text2" size="7"> 5文字入力するとカーソル移動<br> 3...<input type="text" name="text3" size="7"> </form> </body> </html>

  • フォーカスが外れたときの動作について

    お世話になります。 あるテキストフィールド(text1)をクリックした際に隠れている別のテキストフィールド(text2)を表示し、 フォーカスが外れるとtext2を再度隠すというコードを書きました。 <html> <head> <style> <!-- #text2 { display: none; } --> </style> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> <!-- $(function() { $("#text1").click(function() { $("#text2").show(); }).blur(function() { $("#text2").hide(); }); }); --> </script> </head> <body> <form> <input type="text" id="text1" value=""/> <input type="text" id="text2" value=""/> </form> </body> </html> この場合、text1をクリックしたときにtext2が表示されて、フォーカスが外れるとtext2が隠れるのは想定通りの動作なのですが、これをtext2をクリックした場合にはtext1からフォーカスが外れてもtext2を表示したままということはできるのでしょうか。 blurの中でtext2がクリックされた時みたいな検知ができれば実現できると思うのですがそのようなことってできますでしょうか。 よろしくお願いいたします。

  • 複数の入力欄についての入力チェック

    JAVAScriptを勉強し始めたものです。 よろしくお願いします。 1つのページに複数のフォームと入力欄があります。 それぞれの入力欄は数字を入力することになっていて、その数字が1~90の間にあるかどうかをチェックしたいと考えています。 下記のようなページを見ると、一つ一つの入力欄について、IF文でチェックしているのですが、一括してチェックするようなことは可能ですか? http://www.tagindex.com/javascript/form/check1.html ----------------------------------------- 【以下に、やりたいことの例を示します】 <script type="text/javascript"> <!-- function matchNum() { n=eval(document.myFORM1.myTEXT1.value); // ←この行の「myFORM1」と「myTEXT1」をすべてを網羅するように書き換えられないか? if ( n < 1 || n > 90 ) { alert("入力できるのは、1~90の値です。"); } } // --> </script> <FORM METHOD="GET" name="myFORM1"> <INPUT TYPE="text" NAME="myTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="myTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="myTEXT3" onblur="matchNum()"> </FORM> <br> <FORM METHOD="GET" name="myFORM2"> <INPUT TYPE="text" NAME="yourTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="yourTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="yourTEXT3" onblur="matchNum()"> </FORM> <br> <FORM METHOD="GET" name="myFORM3"> <INPUT TYPE="text" NAME="hisTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="hisTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="hisTEXT3" onblur="matchNum()"> </FORM> <br> <FORM METHOD="GET" name="myFORM4"> <INPUT TYPE="text" NAME="herTEXT1" onblur="matchNum()"> <INPUT TYPE="text" NAME="herTEXT2" onblur="matchNum()"> <INPUT TYPE="text" NAME="herTEXT3" onblur="matchNum()"> </FORM>

  • テキストボックスのフォーカス移動

    こんにちは。 htmlページで<input type="text"/>に既定の桁数を入力したら次のinputにフォーカスを 移動させたいと考えています。 下の例の場合、1番目のテキストボックスに既定の桁数5ケタを入力したら、フォーカス を2番目のテキストボックスに移動させ、2番目のテキストボックスに4ケタ入力したら 3番目のテキストボックスにフォーカスを移動させるようにしたいと思っています。 スクリプトの再利用ができるよう、たとえば同じname属性を与えればその範囲内で 簡単にフォーカスを移動させられるようなものにしたいと思うのですが、うまくいきません。 何か良い書き方はありませんでしょうか? <div>  <input type="text" name="hoge" maxlength="5" onkeyup="test(this)"/>  <input type="text" name="hoge" maxlength="4" onkeyup="test(this)"/>  <input type="text" name="hoge" maxlength="5" onkeyup="test(this)"/>  <input type="text" name="hoge" maxlength="2" onkeyup="test(this)"/> </div>  ・  ・ <script type="text/javascript"> function test(elm) {  if (elm.value.length >= elm.maxLength) {   /*(気持ちとしては、ここにこのような感じのことを書きたいのですが・・・)     var arr_elm = document.getElementsByName(elm.name);     var n = elm.index + 1     arr_elm[n].focus();   */   } } </script>

  • フォーカスの移動

    どうしてもわからないので、教えて下さい。 下の option ボタンのいずれかを選択した際に、 自動的にテキストボックスにフォーカスが移るような スクリプトを書きたいのですが、 スクリプトの内容と、htmlにへの組み込み方を どのように実装してよいかわかりません。 ------------------------------------- <html> <title></title> <head> <script language="JavaScript"> //フォカース移動 function moveFocus() { //???? } </script> </head> <body> <form name="myForm"> <select name="mySelect"> <option name="op1">test1</option> <option name="op2">test2</option> </select> <input type="text" name="myText"></input> </form> </body> </html>

  • onChangeの使い方について教えてください。

    javascriptで困っています。助けてください。 テキストボックスに入力された値をonChangeで検出し、入力内容をチェックしようとしています。 テキスト入力後、テキストボックスからフォーカスを外せば、問題なく作動するのですが、 テキストを入力し、フォーカスを外さずに、そのまま送信ボタンを押すと、 チェック結果を待たずに、次のファイル(画面)に移ってしまいます。 多分、onChangeを使う上で、よく発生する問題かと思うのですが、 みなさん、どのように回避されているのでしょうか? <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function check(){ alert('チェック'); } //--> </script> </head> <body> <form method="get" action="reg.php"> タイトル<br> <input type="text" name="title" onChange="check()"><br> <input type="submit" value="送信"><br> </form> </body> </html>

  • functionの値を別のfunction へ

    set_hidukeで取得した「true」を hiduke_chkにもっていく方法を教えていただけないでしょうか。 <SCRIPT language=JavaScript> function set_hiduke(){ var hiduke_input = true } function hiduke_chk(){ if(hiduke_input==true) alert("日付をいじった?") } </SCRIPT> <FORM NAME=main ACTION="★" METHOD="POST" onSubmit="return hiduke_chk()"> <INPUT TYPE="TEXT" NAME="年月日" SIZE="12" onBlur="set_hiduke();"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信"></form>

  • フォーカス設定について教えてください。

    フォーカス設定について教えてください。 テキストボックスに入力エラーがあった場合(数値チェックなど)、以下のようなスクリプトでメッセージボックスを出し、エラー項目にフォーカスをあて、エラー項目の背景色を変更しています。 通常は、問題なく動作するのですが、テキストボックス→セレクトボックスという順番にフォーム部品が並んでいると、エラー項目のテキストボックスと次の部品であるセレクトボックスの両方にフォーカスが当たってしまいます。 テキストボックスのみにフォーカスを当てたいのですか、どなたか理由と解決策を教えていただけないでしょうか。 よろしくお願いします。 //=================================================== // クライアントエラー時の処理 // 引数 1. oItem : エラー項目オブジェクト //=================================================== function onErrorItem(oItem) { var sErrCls = ""; var sErrCls = oItem.className; if ( sErrCls.substr(0, 3) != "err" ) { sErrCls = "err" + sErrCls; } //項目背景色反転&前回分項目背景色反転解除 fncObjTurnOver(oItem, sErrCls); //フォーカス設定 if ((oItem.type == "text") || (oItem.type == "password")) { //テキストボックスの場合 oItem.select(); }else{ oItem.focus(); } } /*エラーチェック*/ function fnCheckNum(object,msgID,msgParam){ if(fncIsNum(object) <0){ //メッセージボックスを出す fncMsgPopUp(msgID, msgParam, null); onErrorItem(object); } } <呼び出し元> <input type="text" size="3" name="hospCount" maxlength="2" class="InputNum" onblur="fnCheckNum(this,'E0004','病院数');">

  • 変更のかかったテキストフィールドに再度フォーカスを設定するには?

    お世話になります。 テキストフィールドを複数用意し、 1つのフォームに対して変更が掛かった時にフィールド名をアラートで表示し、 再びフォーカスを変更したテキストフィールドに戻すソースを組みたいと考えています。 (結果、ループのような形になりますが、、、例として捕らえてください。。) 下記のソースを組んだのですが、?の部分の指定がうまくいかず、苦戦しております。 上記のことを行うには、?の部分をどう記述すべきかご教示いただけませんでしょうか。 皆様のお力を御貸しください。どうぞよろしくお願い致します。 <script type="text/javascript" > function fnc_OnChangeFields(Fieldname,Fieldvalue){ with(document.f1){ alert(Fieldname); ?????????.focus(); } } </script> <body> <form method="post" name="f1"> <tr> <td> \<input TYPE="text" NAME="field1" onchange="return fnc_OnChangeFields(this.name,this.value)"></td> <td> \<input TYPE="text" NAME="field2" onchange="return fnc_OnChangeFields(this.name,this.value)"></td> <td> \<input TYPE="text" NAME="field3" onchange="return fnc_OnChangeFields(this.name,this.value)"></td> </tr> </body>

専門家に質問してみよう