0

データベースでユーザー名をチェックし、キーアップで既存の名前を入力するとエラーを表示する JQuery スクリプトを作成しました。これは正常に機能しますが、このエラーが true の場合でもフォームは送信されます。このエラーが存在しないことを確認するために、他にどのようなコードを追加できますか? これが私がこれまでに持っているコードです:

<script>
        $(function()
        {
        var ck_username = /^[A-Za-z0-9_]{5,15}$/;
// Username validation
        $('#username').keyup(function()
        {
        var username=$(this).val();
        if (!ck_username.test(username))
        {
        $('.usernameStatus').removeClass("success").addClass("error");
        }
        else
        {
        $('.usernameStatus').removeClass("success").removeClass("error");
            jQuery.ajax({
                type: 'POST',
                url: 'check-users.php',
                data: 'username='+ username,
                cache: false,
                success: function(response){
                    if(response == 1){
                        $('.usernameStatus').removeClass("success").addClass("error");
                    }
                    else {
                        $('.usernameStatus').removeClass("error").addClass("success");
                    }
                }
            });
        }
        });
// Submit button action
        $('#registerButton').click(function()
        {
        var username=$("#username").val();
        if(ck_username.test(username))
        {           
            jQuery.post("register.php", {
            username:username,
            },  function(data, textStatus){
            if(data == 1){
            window.location.replace("registered.php");
            }else{}
            });
        }else{
        alert("Something went Wrong - Please Check All Fields Are Filled In Correctly");
        }
        return false;
        });
        //End
        });
        </script>

ありがとうございました

4

3 に答える 3

0

data == 1名前が既に登録されており、エラーが表示されることを意味すると仮定して、コードのコメントを参照してください。

<script>
        $(function()
        {
        var name = false; // a variable that holds false as the initial value
        var ck_username = /^[A-Za-z0-9_]{5,15}$/;
// Username validation
        $('#username').keyup(function()
        {
        var username=$(this).val();
        if (!ck_username.test(username))
        {
        $('.usernameStatus').removeClass("success").addClass("error");
        }
        else
        {
        $('.usernameStatus').removeClass("success").removeClass("error");
            jQuery.ajax({
                type: 'POST',
                url: 'check-users.php',
                data: 'username='+ username,
                cache: false,
                success: function(response){
                    if(response == 1){
                        $('.usernameStatus').removeClass("success").addClass("error");
                    }
                    else {
                        $('.usernameStatus').removeClass("error").addClass("success");
                        name = true; // on success , if the name isnt there then assign it to true
                    }
                }
            });
        }
        });
// Submit button action
        $('#registerButton').click(function()
        {
        var username=$("#username").val();
        if(ck_username.test(username) && name == true) // check for the value of name
        {           
            jQuery.post("register.php", {
            username:username,
            },  function(data, textStatus){
            if(data == 1){
            window.location.replace("registered.php");
            }else{}
            });
        }else{
        alert("Something went Wrong - Please Check All Fields Are Filled In Correctly");
        }
        return false;
        });
        //End
        });
        </script>
于 2013-03-11T16:34:59.060 に答える
0

あなたのエラーはdata構文が悪いためだと思います

次のようになります。

data: 'username:'+ username,

PHPコードをデバッグして、現時点でユーザー名を正しく受け取っているかどうかを確認してください

于 2013-03-11T16:37:05.153 に答える
0

正規表現に対してユーザー名をチェックする代わりに$('.usernameStatus')、正規表現テストに合格してもデータベースから返された重複テストに失敗する可能性があるため、のステータスを確認する必要があります。

そう

$('#registerButton').click(function()
        {
        var username=$("#username").val();
        if(ck_username.test(username))
        { 

代わりに次のようにする必要があります。

$('#registerButton').click(function()
        {
        var username=$("#username").val();
        if(!$('.usernameStatus').hasClass('error'))
        { 

name フィールドの有効性を保持する変数を導入すると、DOM 要素を常に取得してそのクラスをチェックする必要がなくなります。

于 2013-03-11T16:36:24.660 に答える