我在表单验证方面遇到了一个奇怪的问题。表单上有一个“检查用户名”按钮,它旁边有一个输入框,输入框默认值是用户名,例如“betamax”。当我按下“检查用户名”按钮时,它会通过正则表达式并将用户名发送到服务器。服务器按预期行事,并返回“2”以告诉javascript他们正在提交自己的用户名。
然后,当我再次点击按钮时,正则表达式失败了。显然没有发送任何东西到服务器,因为正则表达式已失败。如果我再次按下按钮,则正则表达式通过,然后用户名被发送到服务器。
我真的无法弄清楚是什么原因导致它这样做!对我来说毫无意义!
编辑:我已在Firefox和Chrome (mac)中测试了此问题。
这是我的代码:
然后,当我再次点击按钮时,正则表达式失败了。显然没有发送任何东西到服务器,因为正则表达式已失败。如果我再次按下按钮,则正则表达式通过,然后用户名被发送到服务器。
我真的无法弄清楚是什么原因导致它这样做!对我来说毫无意义!
编辑:我已在Firefox和Chrome (mac)中测试了此问题。
这是我的代码:
$j("#username-search").click(checkUserName);
function checkUserName() {
var userName = $j("#username").val();
var invalidUserMsg = 'Invalid username (a-zA-Z0-9 _ - and not - or _ at beginning or end of string)';
var filter = /^[^-_]([a-z0-9-_]{4,20})[^-_]$/gi;
if (filter.test(userName)) {
console.log("Pass")
$j.post(
"/account/profile/username_check/",
{ q: userName },
function(data){
if(data == 0) {
$j("#username-search-results").html("Error searching for username. Try again?");
}
else if(data == 5) {
$j("#username-search-results").html(invalidUserMsg);
}
else if(data == 4) {
$j("#username-search-results").html("Username too short or too long.");
}
else if(data == 2) {
$j("#username-search-results").html("This is already your username.");
}
else if(data == 3) {
$j("#username-search-results").html("This username is taken.");
}
else if(data == 1){
$j("#username-search-results").html("This username is available!");
}
});
} else {
console.log("fail")
$j("#username-search-results").html(invalidUserMsg);
}
return false;
}
HTML代码:
<input name="username" id="username" value="{{ user.username }}" />
<input type="button" value="Is it taken?" id="username-search">
<span id="username-search-results"></span>