Имеется валидация полей (input) с помощью JS. Имеется несколько полей для заполнения и кнопка "Submit". В JS прописано при загрузке страници устанавливать сразу для кнопки "Submit" псевдокласс
:disabled
. На каждом поле стоит событие
onfocus, которое в режиме реального времени проверяет валидность введенных в поле данных и событие
onchange, которое и проверяет, если все данные, введенные во все поля
input (если все функции проверки возвращают
true), то, по логике, к кнопке "Submit" должен примениться псевдокласс
:disabled, но этого не происходит. Почему?
Форма для ввода:
<!-- ПОЛЯ ДЛЯ ВВОДА -->
<input type="text" id="freight" name="volume" value="${freight}" placeholder="<fmt:message key="offer.freight"/>" onfocus="validateFreight()" onchange="validateConfirm()" required>
<input type="text" id="volume" name="volume" value="${volume}" placeholder="<fmt:message key="offer.volume"/>" onfocus="validateVolume()" onchange="validateConfirm()" required>
<!-- КНОПКА -->
<button type="submit" id="confirm" class="btn-confirm" href="${pageContext.request.contextPath}/controller?command=go_to_create_offer_page">
<fmt:message key="cargo.button.createOffer"/>
</button>
Проверка с помощью JS:
const regexpVolume = /^\p{Nd}{1,10}(?:\.\p{Nd}{0,2})?$/u;
const regexpFreight = /^\p{Nd}{1,20}(?:\.\p{Nd}{0,2})?$/u;
window.onload = function () {
const confirmButton = document.getElementById("confirm");
confirmButton.disabled = true;
}
function validateVolume() {
const volume = document.getElementById("volume");
const descriptionVolume = document.getElementById("description_volume");
volume.oninput = function() {
if (regexpVolume.test(volume.value)) {
descriptionVolume.style.color = "#50C878";
return true;
} else {
descriptionVolume.style.color = "#F00";
return false;
}
}
}
function validateFreight() {
const freight = document.getElementById("freight");
const descriptionFreight = document.getElementById("description_freight");
freight.oninput = function() {
if (regexpFreight.test(freight.value)) {
descriptionFreight.style.color = "#50C878";
return true;
} else {
descriptionFreight.style.color = "#F00";
return false;
}
}
}
function validateConfirm() {
const confirmButton = document.getElementById("confirm");
if(validateVolume() && validateFreight()) {
confirmButton.disabled = false;
}
}
https://jsfiddle.net/tLdg6kwp/