0

JavaScript フォームから変数を取得して、フォームが以前に検証されているかどうかを判断しようとしています。

そのため、ユーザーが「送信」ボタンをクリックすると、これがチェックされます。このボタンがクリックされたときに関数を実行できるように、既に設定しています。

検証コード:

$(document).ready(function(){
    $('#email').keyup(function() {
        var email = $('#email').val();
        var minChars = 5;
        var characters_error = 'Not enough characters';
        $('#email_status').text("Checking..");  
        if (email != '') {
            if($('#email').val().length <= minChars)
            {
                //if it's bellow the minimum show characters_error text
                $('#email_status').text(characters_error);
            }
            else if ($('#email').val().length > minChars)
            {
                $.post('validation/refer_validation.php', {email: email}, function(data){
                    $('#email_status').text(data);
                }); 
            } else
            {
                $('#email_status').text('');
            }
         }
    });
});

ボタンコード:

$(document).ready(function(){
    $("#submit").click(function () {
        if (validated != true)
        {
            // Tell the user that there is an error in the form.
        }
    });
});

「検証済み」と呼ばれる変数を追加した方法に注意してください。これはどこかに設定する必要がありますが、これは私が混乱している場所です。変数を更新してボタンに返すにはどうすればよいですか? 検証コードは HTML フォームに含まれていますが、変数を作成した場合、キーアップ時に関数が呼び出されるため、変数は常にデフォルトに更新されるためです。

うまくいけば、これはすべて理にかなっています。

4

4 に答える 4

1

送信ボタンを使用して検証関数を呼び出すのではなく、フォームの送信時に呼び出します。true を返すと続行してフォームを送信し、false を返すとフォームの送信をキャンセルします。

<form  onsubmit="return validate();">

Onsubmit は、送信が実際に行われる直前に呼び出されます。

于 2012-07-04T11:02:10.007 に答える
0

変数の検証をグローバル変数として使用し、検証が成功するたびに検証をtrueにします

その後、送信ボタンをクリックすると正常に動作します

于 2012-07-04T11:07:04.467 に答える
0

グローバル変数を設定します。つまり、すべての関数の外側で設定します

var validated = false;

その後、それに応じて検証済みに設定し、送信時に読み取る必要があります。

于 2012-07-04T11:03:41.800 に答える
0

外部変数を投げるよりも、フォームが検証されたという事実をフォーム自体のデータ属性としてログに記録する方がよい場合があります。

また、ボタンをクリックして検証すると、Enter キーを介してフォームが送信される可能性があるという事実が無視されるため、代わりにフォームの送信イベントで検証します。

$(function() {
    $('#some_form').on('submit', function() {

        //validated before? forget it
        if ($(this).data('validated')) { alert('already validated'); return false; }

        //else, if first time, log that we're doing it
        $(this).data('validated', 'true');

        //do validation...
   });
});
于 2012-07-04T11:08:40.570 に答える