0

我创建了一个 JQuery 脚本,用于检查数据库中的用户名,如果您在 keyup 上键入现有名称,则会显示错误,这工作正常,但即使此错误为真,表单仍会提交。我可以添加哪些其他代码来检查此错误是否不存在?这是我到目前为止的代码:

<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

而不是根据正则表达式检查用户名,您应该检查状态,$('.usernameStatus')因为它可能通过正则表达式测试但仍然无法通过从您的数据库返回的重复测试。

所以

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

应该改为:

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

更好的是引入一个变量来保存名称字段的有效性,这样您就不需要一直获取 DOM 元素并检查它的类。

于 2013-03-11T16:36:24.660 回答
0

我认为您的错误可能是由于data语法错误

它应该是这样的:

data: 'username:'+ username,

调试你的 PHP 代码,看看它现在是否正确接收用户名

于 2013-03-11T16:37:05.153 回答