![](/img/trans.png)
[英]Form gets submitted even if the required fields are left empty in angular JS
[英]How to allow form to be submitted once required fields are completed?
我已經完成了帶有即時字段驗證的代碼,但如果字段沒有值,我也想阻止提交表單。 我已經設法阻止提交表單,但是當我 go 返回並提供一個值時,它仍然不允許它提交。 知道我在這里做錯了什么嗎?
這是 HTML:
<form id="contactForm" action="https://formspree.io/xrggbejj" method="POST" onsubmit="return formValidation(contactForm);">
<div class="row">
<div class="col">
<label for="fName">First Name</label>
</div>
<div class="col">
<input type="text" id="fName" name="firstname" onblur="checkFirstName(firstName)" autofocus/>
<img src="../images/alert-icon.png" class="alert" id="firstNameMsg" alt="alert icon" width="40" height="35"/>
</div>
</div> <!-- End of row -->
<div class="row">
<div class="col">
<label for="lName">Last Name</label>
</div>
<div class="col">
<input type="text" id="lName" name="lastname" onblur="checkLastName(lastName)"/>
<img src="../images/alert-icon.png" class="alert" id="lastNameMsg" alt="alert icon" width="40" height="35"/>
</div>
</div> <!-- End of row -->
<div class="row">
<div class="col">
<label for="subject">Questions and/or Comments</label>
</div>
<div class="col">
<textarea id="subject" name="subject" onblur="checkSubject(subject)" style="height:200px"></textarea>
<img src="../images/alert-icon.png" class="alert" id="subjectMsg" alt="alert icon" width="40" height="35"/>
</div>
</div> <!-- End of row -->
<div class="row">
<input type="submit" value="SEND" />
</div> <!-- End of row -->
</form>
這是 JavaScript:
聯系表單字段驗證
var alertStyle;
var alertImg;
const firstName = document.forms['contactForm']['fName'];
const lastName = document.forms['contactForm']['lName'];
const subject = document.forms['contactForm']['subject'];
function checkFirstName(firstName) {
if (firstName.value === '') {
alertStyle = document.getElementById('fName').style.border = '2px solid rgba(255, 6, 0)';
alertImg = document.getElementById('firstNameMsg').style.display = 'inline-block';
return false;
} else if (firstName.value !== '') {
alertStyle = document.getElementById('fName').style.border = '1px solid #ccc';
alertImg = document.getElementById('firstNameMsg').style.display = 'none';
return true;
}
}
function checkLastName(lastName) {
if (lastName.value === '') {
alertStyle = document.getElementById('lName').style.border = '2px solid rgba(255, 6, 0)';
alertImg = document.getElementById('lastNameMsg').style.display = 'inline-block';
return false;
} else if (lastName.value !== '') {
alertStyle = document.getElementById('lName').style.border = '1px solid #ccc';
alertImg = document.getElementById('lastNameMsg').style.display = 'none';
return true;
}
}
function checkSubject(subject) {
if (subject.value === '') {
alertStyle = document.getElementById('subject').style.border = '2px solid rgba(255, 6, 0)';
alertImg = document.getElementById('subjectMsg').style.display = 'inline-block';
return false;
} else if (firstName.value !== '') {
alertStyle = document.getElementById('subject').style.border = '1px solid #ccc';
alertImg = document.getElementById('subjectMsg').style.display = 'none';
return true;
}}
提交時聯系表單驗證
function formValidation(contactForm) {
if (firstName && lastName && subject !== true) {
alert('Please fill out required fields.')
event.preventDefault()
return false;
} else if (firstName && lastName && subject === true) {
return true;
}
}
firstName
、 lastName
和subject
變量指向輸入而不是它們內部的實際值。 您可以將 function 修改為
function formValidation(contactForm) {
if (!firstName.value || !lastName.value || !subject.value) {
alert('Please fill out required fields.')
event.preventDefault()
return false;
} else {
return true;
}
}
這里我用了!
運算符在輸入為空時將輸入轉換為True
,如果任何輸入為空,則第一種情況將評估,否則您的 function 將返回真。
既然你這樣做
if (firstName && lastName && subject !== true) {
...
}
我假設您希望這樣做
if (firstName.value === '') {
alertStyle = document.getElementById('fName').style.border = '2px solid rgba(255, 6, 0)';
alertImg = document.getElementById('firstNameMsg').style.display = 'inline-block';
return false;
會做這樣的事情
firstName = true
但它實際上並沒有為firstName
分配任何東西。 它只是返回真。
您可以使用isValid
之類的變量並執行isValid = true
而不是在您的checkLastName() etc..
但是,由於您正在這樣做
document.getElementById('lastNameMsg').style.display = 'none'
你可以做
function formValidation(contactForm) {
if (document.getElementById('lastNameMsg').style.display !== 'none') {
alert('Please fill out required fields.')
event.preventDefault()
return false;
} else if (document.getElementById('lastNameMsg').style.display === 'none') {
return true;
}
}
無論如何,有多種方法可以簡化,但希望這能讓你繼續前進:)
干杯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.