• ベストアンサー

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>

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

要するに、イベント中に別イベントが発生するのがよろしくないのだと思います。 泥臭い対処ですが、イベントが終了してから実行するような感じでどうでしょうか ---------------------------------------------------------------- var TimeID=null; function setFocus(fn){ clearTimeout(TimeID); document.forms[0][fn].focus(); document.forms[0][fn].value +=""; } function checkText(aText){ if (aText.value.length > 1) { alert('サイズオーバーです'); //aText.focus(); // TimeID=setTimeout("setFocus('fmTitle')",300);//時間を置いて実行する TimeID=setTimeout("setFocus('"+ aText.name + "')",300); } }

xyz_1990
質問者

お礼

解決しました。 ありがとうございます。

その他の回答 (2)

回答No.2

こんばんは。 Firefoxでのエラーとのことですが、現在FireFoxでは.Focus()イベントでエラーが出ることが確認されているようです。Firefoxは未使用なのでこちらでは確認できませんが日本語で書かれているページがありましたので参考URLもご確認ください。

参考URL:
http://www2.ns-labs.com/cgi-bin/security_detail_2.cgi?os=win&id=9&p=49
xyz_1990
質問者

お礼

ご回答ありがとうございます。 #3さんの方法で、解決しました。 が、focus()は気をつけた方がよさそうですね。

回答No.1

http://mrmx.blogspot.com/2005/12/javascript-firefox-onblur-focus.html 読んでませんがFirefox側のバグかもしれません calling this.blur() in onfocus handler or this.focus() in an onblur handler do not work https://bugzilla.mozilla.org/show_bug.cgi?id=53579

xyz_1990
質問者

お礼

ありがとうございます。 せっかく教えていただいたのですが、 英語はちょっと。。。です。 私の手におえなさそうなので、 別チェック方法を考えようかと思います。

関連するQ&A

専門家に質問してみよう