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

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>

A 回答 (4件)

<form>


<input type="text" onkeyup="document.getElementById('orz').disabled=this.value!='test'"/>
<input id="orz" type="submit" disabled="true"/>
</form>

IEとFFで、submitが押されたときの画面遷移のタイミングが違うので、
(FFだとonsubmitをハンドルしないとだめっぽい)、チェックを通らない限りsubmitボタンを押せなくしてしまうというのが、わかりやすくていいかもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます。

この方法で、狙いの機能が実現できました。

ご回答頂いた、皆様にも、お礼を申し上げます。
どうも、ありがとうございました。

お礼日時:2006/10/24 02:28

titleに対して onkeypressイベントを記述してはいかがでしょう



<input type="text" name="title" onChange="return check();" onKeypress="return keycheck();">
として

function check()
{
window.alert('チェック');
// titleの入力がtestならOK それ以外は NG
return window.event.srcElement.value == "test";
}

function keycheck()
{
if ( window.event.keyCode == 0x0D ) {
return check();
}
return true;
}

この回答への補足

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

ご教授頂いた方法では、IEでは上手く動いたのですが、FireFoxだと状況は変わりませんでした。

補足日時:2006/10/23 14:47
    • good
    • 0

通常はformにonSubmitを設定してチェックします

この回答への補足

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

サンプルのコードではテキストボックスが1つですが、実際には同一画面に複数のテキストボックスを設定しようとしています。(タイトル、コメント、カテゴリなど)
また、データベース内で、タイトルが重複しないように使用としています。

このため、全てを入力した後チェックをすると、タイトルが重複していた場合、全ての入力が無駄になってしまいます。
そこで、タイトルの入力が終了した時点で、チェックを行いたいのです。

説明不足で申し訳ございませんでした。

補足日時:2006/10/23 14:39
    • good
    • 0

onChangeで入力内容をチェックするのではなく、送信前にチェックしてはいかがでしょうか?

この回答への補足

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

送信前にチェックをしたいのですが、
今の状態だと、チェックをする前に送信ボタンを押された時におかしなことが起こってしまいます。

補足日時:2006/10/23 13:54
    • good
    • 0

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