3 回答

TA貢獻1776條經驗 獲得超12個贊
不要使用“單擊”處理程序,而是使用 FORM 的事件處理程序!
"submit"
創建一個漂亮的可重用驗證函數,該函數還將使用
classList.toggle()
處理輸入樣式使用所需的驗證程序填充函數
validate
最后使用 CSS 來處理錯誤邊框和消息可見性使用類
is-error
始終將錯誤SPAN元素作為所需操作元素的同級元素放置,這樣當輸入獲得時,我們可以使用CSS的常規同級組合器來定位它?
.is-error
無論你有多少個輸入,你都不需要編寫額外的JS邏輯。只需驗證所需的那些,例如const has_err = validate(EL("#foo"), "length");
const validate = (el, validatorName = "length") => {
const val = el.value.trim();
const isErr = {
// Basic, validates if there's value
length: () => val.length < 1,
// Validate between 5 and 30 charaters
length_5_30: () => val.length < 5 || val.length > 30,
// Add more validators
}[validatorName]();
el.classList.toggle("is-error", isErr);
return isErr;
};
const EL = (sel, EL) => (EL || document).querySelector(sel);
EL("#my_form").addEventListener("submit", function(event) {
const err_1 = validate(EL("#naslov"), "length_5_30");
const err_2 = validate(EL("#bla"), "length");
if (err_1 || err_2) {
event.preventDefault();
}
});
form .is-error {
outline: 1px dashed red;
}
form .error-message {
display: none;
color: red;
}
form .is-error ~ .error-message {
display: block;
}
<form id="my_form" name="my_form" enctype="multipart/form-data" method="POST" action="skripta.php">
<div class="form-group row">
<div class="col-md-6">
<label for="naslov">Naslov</label>
<input type="text" id="naslov" name="naslov" class="form-control">
<span class="error-message">Naslov vjesti mora imati izme?u 5 i 30 znakova!</span>
</div>
</div>
<div class="form-group row">
<div class="col-md-6">
<label for="naslov">Bla bla</label>
<input type="text" id="bla" name="bla" class="form-control">
<span class="error-message">Ovo polje ne mo?e biti prazno!</span>
</div>
</div>
<button type="submit">Po?alji</button>
</form>

TA貢獻1886條經驗 獲得超2個贊
應改用表單驗證函數。在表單中,添加一個名為“提交時”的屬性。表單應如下所示:
<form onsubmit="return checkBeforeSubmitting()"></form>
然后,您可以在發送數據之前運行函數。如果您不希望發送數據,請在特定條件下使“在提交之前檢查()”返回為假。
鏈接到有關如何使用此功能的更多信息:https://www.w3schools.com/js/js_validation.asp

TA貢獻2080條經驗 獲得超4個贊
阻止表單提交的最好方法是掛接到其事件中,并在 java 腳本中執行此操作,而不是將 java 腳本添加到 html 中。它看起來像這樣:submit
var form = document.querySelector('form.myform');
form.addEventListener('submit', e => {
// put your conditional here
if( please_dont_submit == true ) {
e.preventDefault();
}
// else form will submit;
});
<form class="myform">
<!-- form stuff -->
<input type="submit" value="Submit">
</form>
在完成之后,您可能還希望從表單本身內部提交表單。您可以通過設置一個標志來指示檢查已被處理來執行此操作:preventDefault()
const form = document.querySelector('form.myform');
var okToSubmit = false;
form.addEventListener('submit', e => {
// put your conditional here
if( please_dont_submit == true && ! okToSubmit ) {
e.preventDefault();
// do some further processing and submit again.
okToSubmit = true;
e.target.submit();
}
// else form will submit;
});
添加回答
舉報