表单验证不同步
Form validation out of sync
我正在完成 CS50 课程的作业,我是 Jquery/Ajax 的新手。在其中一种表格(注册表格)中,我正在检查输入到现有用户的文本字段中的用户名。我有代码向 Flask/Python 后端发出 GET 请求,然后查询数据库和 returns 一个 Json(用户的 true/false 已经存在是或否)。
我默认禁用提交按钮。只有当用户输入唯一的用户名时,才会启用提交按钮。否则,将显示一条错误消息并且提交按钮保持禁用状态。我用 keyup 函数检查 "live"。
代码运行良好,除非我非常快速地输入现有用户名。然后不知何故,提交按钮被启用而不是被禁用。这几乎就像浏览器仍在追赶对后端的 GET 请求,因此注册了不完整的名称,并且无法正确响应作为用户名输入的最新值。
例如,当我输入 "John"(现有用户)时,可以在(Flask)控制台中看到 JSON 没有按照我输入的顺序返回,例如"J"、"Jo"、"Joh"、"John"。但是返回的 Jsons 的顺序是例如"Jo"、"J"、"John"、"Joh"。在这种情况下,这会导致提交按钮被错误地启用,因为字段 "Username" 的当前值是 "John",这是一个现有用户。
我在下面粘贴了一段我的 JS 代码,你能给我一些指示吗?
<script>
(function() {
$( "#username" ).keyup(function(event) {
var username = document.getElementById('username').value;
$.ajax({
url: "/check",
data: {username: username},
dataType: "json",
}).done(
function (data, textStatus, jqXHR)
{
if (data == true)
{
$('#usernameExists').removeClass('collapse');
document.getElementById("register").disabled = true;
}
else
{
$('#usernameExists').addClass('collapse');
document.getElementById("register").disabled = false;
}
}
);
});
})();
</script>
为什么要使用onkeyup
?让用户完成他们的想法。正如您所发现的,它会为每个字母执行脚本。这将导致不准确的结果,例如,如果现有用户 "JohnDoe",那么可怜的 "John" 将永远无法注册。
我正在完成 CS50 课程的作业,我是 Jquery/Ajax 的新手。在其中一种表格(注册表格)中,我正在检查输入到现有用户的文本字段中的用户名。我有代码向 Flask/Python 后端发出 GET 请求,然后查询数据库和 returns 一个 Json(用户的 true/false 已经存在是或否)。
我默认禁用提交按钮。只有当用户输入唯一的用户名时,才会启用提交按钮。否则,将显示一条错误消息并且提交按钮保持禁用状态。我用 keyup 函数检查 "live"。
代码运行良好,除非我非常快速地输入现有用户名。然后不知何故,提交按钮被启用而不是被禁用。这几乎就像浏览器仍在追赶对后端的 GET 请求,因此注册了不完整的名称,并且无法正确响应作为用户名输入的最新值。
例如,当我输入 "John"(现有用户)时,可以在(Flask)控制台中看到 JSON 没有按照我输入的顺序返回,例如"J"、"Jo"、"Joh"、"John"。但是返回的 Jsons 的顺序是例如"Jo"、"J"、"John"、"Joh"。在这种情况下,这会导致提交按钮被错误地启用,因为字段 "Username" 的当前值是 "John",这是一个现有用户。
我在下面粘贴了一段我的 JS 代码,你能给我一些指示吗?
<script>
(function() {
$( "#username" ).keyup(function(event) {
var username = document.getElementById('username').value;
$.ajax({
url: "/check",
data: {username: username},
dataType: "json",
}).done(
function (data, textStatus, jqXHR)
{
if (data == true)
{
$('#usernameExists').removeClass('collapse');
document.getElementById("register").disabled = true;
}
else
{
$('#usernameExists').addClass('collapse');
document.getElementById("register").disabled = false;
}
}
);
});
})();
</script>
为什么要使用onkeyup
?让用户完成他们的想法。正如您所发现的,它会为每个字母执行脚本。这将导致不准确的结果,例如,如果现有用户 "JohnDoe",那么可怜的 "John" 将永远无法注册。