我的代码在提交之前验证表单中的所有字段是否都已填写时遇到问题。我尝试在我的事件侦听器中放置一个 if 语句,但它似乎不起作用。我想知道是否有人知道如何实现这一目标。我查看了 W3 和其他示例,但它们似乎不起作用。这是我的代码。我也不想通过 HTML 验证来执行此操作,因为很容易进入开发工具并删除 input 元素的 required 属性。任何帮助,将不胜感激。我还附加了 CSS 用于样式目的。
var form = document.querySelector("#user_form");
let reqHeaders = {
headers: {
Authorization: "Bearer ",
}
}
let url = "https://api.airtable.com/v0/appMPvHoTHviahyfz/email-list"
let reqData = {
records: [
{
fields: null
}
]
}
let formData = {
firstName: "",
lastName: "",
email: ""
}
function logData(id, dataObj, value) {
dataObj[id] = value;
console.log(value)
}
form.addEventListener("submit", function (e) {
e.preventDefault();
reqData.records[0].fields = formData;
console.log(reqData);
axios.post(url, reqData, reqHeaders).then(res => {
document.querySelector('.success-messg').style.display = 'block';
setTimeout(function(){
form.reset();
document.querySelector('.success-messg').style.display = 'none';
},2000)
})
.catch (err => {
if (err.reponse){
document.querySelector('.fail-messg').style.display = 'block';
setTimeout(function(){
document.querySelector('.fail-messg').style.display = 'none';
form.reset();
}, 3000)
} else if (err.request) {
document.querySelector('.fail-messg').style.display = 'block';
setTimeout(function(){
document.querySelector('.fail-messg').style.display = 'none';
form.reset();
}, 3000)
} else {
console.log(err);
}
})
});
.form-wrapper{
text-align: center;
}
#user_form{
height: 11rem;
width:30rem;
position:absolute;
margin:auto;
bottom:0;
top:55vh;
left:0;
right:0;
opacity:0;
z-index:4;
}
.form-wrapper input{
border:0;
color:black;
background-color:#f9da06;
border-bottom:2px solid black;
width:10.5rem;
margin:1.2rem;
}
.form-wrapper input:focus{
border:0;
border-bottom:2px solid black;
outline:none;
}
.form-wrapper ::placeholder {
color:black;
opacity: 1;
}
#info-submit{
background-color:black;
font-size: 20px;
color:#f9da06;
border:0;
cursor: pointer;
height:2.289rem;
width:10.5rem;
outline:0;
}
.success-messg {
font-size: 16px;
text-align: center;
color: black;
height:4rem;
position:absolute;
margin:auto;
bottom:0;
top:80vh;
left:0;
right:0;
display:none;
}
.fail-messg{
text-align: center;
font-size: 14px;
color: black;
height: 2rem;
position:absolute;
margin:auto;
bottom:0;
top:80vh;
left:0;
right:0;
display:none;
}
<div class="form-wrapper">
<form id="user_form">
<input type="name" id="firstName" placeholder="First Name..." name="Firstname" onChange="logData(id, formData, this.value)">
<input type="name" id="lastName" placeholder="Last Name..." name="Lastname" onChange="logData(id, formData, this.value)">
<input type="email" id="email" placeholder="Email..." name="email" onChange="logData(id, formData, this.value)">
<input type="submit" id="info-submit" value="Submit">
</form>
<div class="success-messg"><p>Thank you for your submission!</p></div>
<div class="fail-messg"><p>Sorry, we were unable to take your submission at this time.</p></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>