这是使用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
时,我仍然收到远程错误消息。
我做错了什么?
答案 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