包含提取的表单验证 api
Form validation containing fetch api
我有一个简单的表格,我想在提交和保存数据之前检查它是否包含有效数据。
但是,由于 fetch(...)
是异步的,我无法让验证停止并等待结果。
有没有办法阻止异步获取?
或者也许是更好的方法?
form.addEventListener('submit', (event) => {
fetch(`/check?id=${id}`)
.then((res) => res.json())
.then((json) => {
if (json.error) {
// Prevent the submit here
// event.preventDefault();
}
});
});
如果您想要 UI 友好的体验,您可以将 onfocusout() 或 onblur() 侦听器添加到表单中的每个字段,并在输入时验证每个输入。您可以默认禁用表单的提交按钮,只有在所有验证都通过后才启用它。像这样:
function validateId() {
let id = document.forms.myForm.id.value;
if(id === ""){
document.forms.myForm.submit.disabled = true;
return;
}
fetch(`https://api.github.com/users/${id}/repos`)
.then((res) => res.json())
.then((json) => {
if (json.error) {
// fail validation
alert("Failed!");
document.forms.myForm.submit.disabled = true;
} else {
// success
document.forms.myForm.submit.disabled = false;
}
})
.catch(error => {
alert("Error! " + error);
document.forms.myForm.submit.disabled = true;
});
}
<form name="myForm" action="/action_page.php" method="post">
ID: <input type="text" name="id" onfocusout="validateId()">
<input type="submit" name="submit" value="Submit" disabled>
</form>
我有一个简单的表格,我想在提交和保存数据之前检查它是否包含有效数据。
但是,由于 fetch(...)
是异步的,我无法让验证停止并等待结果。
有没有办法阻止异步获取?
或者也许是更好的方法?
form.addEventListener('submit', (event) => {
fetch(`/check?id=${id}`)
.then((res) => res.json())
.then((json) => {
if (json.error) {
// Prevent the submit here
// event.preventDefault();
}
});
});
如果您想要 UI 友好的体验,您可以将 onfocusout() 或 onblur() 侦听器添加到表单中的每个字段,并在输入时验证每个输入。您可以默认禁用表单的提交按钮,只有在所有验证都通过后才启用它。像这样:
function validateId() {
let id = document.forms.myForm.id.value;
if(id === ""){
document.forms.myForm.submit.disabled = true;
return;
}
fetch(`https://api.github.com/users/${id}/repos`)
.then((res) => res.json())
.then((json) => {
if (json.error) {
// fail validation
alert("Failed!");
document.forms.myForm.submit.disabled = true;
} else {
// success
document.forms.myForm.submit.disabled = false;
}
})
.catch(error => {
alert("Error! " + error);
document.forms.myForm.submit.disabled = true;
});
}
<form name="myForm" action="/action_page.php" method="post">
ID: <input type="text" name="id" onfocusout="validateId()">
<input type="submit" name="submit" value="Submit" disabled>
</form>