如何定义远程检查现有值(用户名)的输入值?

时间:2011-05-28 21:52:12

标签: javascript jquery validation jquery-validate

这是使用jQuery 1.6.1和Validate 1.8.1。

由于这个问题,我一直在撞墙,现在我正在尝试另一种尝试解决这个问题的方法。我需要在数据库中查询现有的用户名,以便注册的人不再注册同一个用户名。

HTML:

<form class="cmxform" action="register.php" method="post" name="signup" id="signup">
   <ul>
      <li>
        <label for="username">Username: <em>*</em></label>
        <input type="text" id="username" name="Username" size="20" class="required" placeholder="Username" />
      </li>
   </ul>
</form>

这一次,我正在尝试使用远程函数来验证脚本:

    $("#signup").validate( {
        var username = $("#username").val();
        rules: {
            Username: {
                required: true,
                minlength: 5,
                remote: {
                    url: "dbquery.php",
                    type: "GET",
                    async: false,
                    data: "action=checkusername&username="+username,
                    success: function (output) {
                            return output;
                    }
                }
            }
        },
        messages: {
            Username: {
                required: "Enter a username",
                remote: jQuery.format("Sorry, {0} is not available")
            },
        },
        submitHandler: function(form) {
            form.submit();
        }
    });

有问题的代码是var username = = $("#uname").val();。 Firebug给出错误missing : after property id

我在validate()内部包含了上面提到的变量,因为我只是在输入内容之后才想要输入的值,而不是在加载页面时。

我遇到的另一个问题是,当数据库中已存在用户名时,只显示远程错误消息。不幸的是,它显示dbquery.php是以true还是false的形式返回。如果我尝试使用现有用户名,则返回false,然后我重写一个返回true的新用户名,该消息不会消失。同样,当我写一个用户名并返回true时,我仍然收到远程错误消息。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以阅读How can I force jQuery Validate to check for duplicate username in database?

解决方案是使用remote属性:

remote的示例:

$("#signup").validate( {
    rules: {
        username: {
            required: true,
            minlength: 5,
            remote: {
                url: "dbquery.php",
                type: "get",
                data: {
                    action: function () {
                        return "checkusername";
                    },
                    username: function() {
                        var username = $("#username").val();
                        return username;
                    }
                }
            }
        }
    },
    messages: {
        username: {
            required: "Enter a username"
        }
    },
    submitHandler: function(form) {
        form.submit();
    }
});

要设置自定义错误消息,您的PHP文件必须返回消息而不是false,因此PHP文件中为echo "Sorry, this user name is not available"

答案 1 :(得分:0)

var username = $("#uname").val();

而不是

var username = = $("#uname").val();

你不能拥有= =,这是一个语法错误。

另外,请确保正确'逃脱'$(“#username”)。val()。 如果有人输入:myname&action=dosomethingelse我会对其进行公平的更改dosomethingelse

新答案:

$("#signup").validate( {
    var username = $("#username").val(); // -- this is wrong
    rules: {
        Username: {
            required: true,
      ...
});

你可以通过不简单地声明变量来解决这个问题,因为你只使用它是一个地方,但这并不好玩:D

解决方案是关闭:

$("#signup").validate( (function () {
    var username = $("#username").val();
    return {
        rules: {
            Username: {
                required: true,
                minlength: 5,
                remote: {
                    url: "dbquery.php",
                    type: "GET",
                    async: false,
                    data: "action=checkusername&username="+username,
                    success: function (output) {
                            return output;
                    }
                }
            }
        },
        messages: {
            Username: {
                required: "Enter a username",
                remote: jQuery.format("Sorry, {0} is not available")
            }
        },
        submitHandler: function(form) {
            form.submit();
        }
    };
}()));

(我没有测试过,可能存在拼写错误或语法错误)。 如果您不知道这是做什么或为什么,请不要担心:D