0

これが私の検証の仕組みです

3 つのテキスト ボックスがあります。名前 | 電子メール | メッセージ。

それらのそれぞれのOnchangeは、それらを検証してカウンターに 1 を追加する関数を実行します。

機能は次のとおりです。 email(), name(), message().

CheckBut という別の関数があります。この関数は、カウンター ===3 を確認することで、各テキスト ボックスが検証されているかどうかを確認します。次に、送信ボタンを有効にします。

各機能の電子メール、メッセージ、私が持っている名前の中で {counter++, CheckBut()}

ここに問題があります:ユーザーは名前を正しく入力してから、電子メール フィールドをクリックします。これにより、名前の検証コードが実行されます。次に、電子メールを入力してメッセージ フィールドをクリックすると、電子メール フィールドの検証コードが実行されます。

メッセージを入力すると、ボタンが無効になっているためボタンをクリックできず、メッセージフィールドを検証する機能は、他の場所をクリックするまで実行されません。どうすればこれを解決できますか? BLUR() を考えていましたが、フォームの範囲内で動作させる方法がわかりません。

4

3 に答える 3

1

チェック フィールドの変更には onkeypress イベントを使用し、最後の 3 ~ 5 秒間フィールドが変更されていない場合は検証の実行に setTimeout を使用できます。このように見えます。

<script>
    var validNameTimer = null;
    function nameValidWait() {
        if (validNameTimer != null) {
            clearTimeout(validNameTimer);
        }
        validNameTimer = setTimeout(nameValid, 4000);
    }
</script>

<input id="name" onkeypress="nameValidWait()" />

修理

onchage を onkeypress に置き換えます

于 2013-05-08T03:45:05.557 に答える
1

onKeyUpリスナーをの代わりに に接続することをお勧めしますonChange。これにより、ユーザーがテキスト フィールドをクリックする前にそれらが実行され、ユーザーがクリックしようとする前に送信ボタンが有効になります。

ただし、onKeyUp検証関数をリッスンすることで、何度も実行されcounter、ユーザーが名前フィールドを離れる前に、おそらく 3 よりも大きくなります。これに対処するには、counter変数を削除し、代わりに 3 つの個別のブール変数 (例: 、、isNameValid)を使用して各値の有効性を追跡することをお勧めします。各検証関数は、単にorをそれぞれの変数に割り当てます。 次に、3 つの変数すべてが true であることを確認するだけに変更されます。isEmailValidisMessageValidtruefalseCheckBut()

于 2013-05-08T03:48:33.443 に答える
0

ボタンを無効にしないでください。代わりに、ボタン クリック イベントで 3 つの検証をすべて実行し、検証が失敗した場合は (オプションで) エラー メッセージを表示し、実行を停止します (戻る)。エラーメッセージは HTML 要素で表示するか、関数を使用できalert(msg)ます。これが役立つことを願っています。ベスト rgds、AB

于 2013-05-08T03:46:47.243 に答える