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

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>

A 回答 (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);

}
}
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/09/28 12:21

こんばんは。


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

参考URL:http://www2.ns-labs.com/cgi-bin/security_detail_ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

#3さんの方法で、解決しました。

が、focus()は気をつけた方がよさそうですね。

お礼日時:2006/09/28 12:25

http://mrmx.blogspot.com/2005/12/javascript-fire …

読んでませんが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
    • good
    • 0
この回答へのお礼

ありがとうございます。

せっかく教えていただいたのですが、
英語はちょっと。。。です。

私の手におえなさそうなので、
別チェック方法を考えようかと思います。

お礼日時:2006/09/27 22:29

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