Я не уверен, что правильно понял, но, на мой взгляд, проблема в том, что элемент form
не определен во время назначения обработчика события blur
:
document.addEventListener("DOMContentLoaded", function() {
var textElements = [...document.getElementsByTagName('input')];
var listen = function(item, index) {
item.addEventListener('keyup', function(ev) {
if (event.target.validity.valid) {
item.style.border = "solid green 2px";
item.style.boxShadow = "0 0 5px green";
} else {
item.style.border = "solid red 2px";
item.style.boxShadow = "0 0 5px red";
}
})
}
textElements.forEach(listen);
});
document.querySelector('form').addEventListener('blur', function(event) {
event.target.style.border = "solid white 2px";
event.target.style.boxShadow = "0 0 5px white";
}, true);
<form action="/action_page.php">
<input type="text" name="username" value="" minLength="6" maxlength="10" required placeholder="Username">
<br><br>
<input type="text" name="password" value="" minLength="8" maxlength="15" required placeholder="Password">
<br><br>
<input type="submit" value="Submit" onclick="function()">
</form>
Если вам не нужны никакие дополнительные проверки и вам нужно только визуализировать правильность ввода, то вы можете обойтись без JS:
input {
border: solid white 2px;
boxShadow: 0 0 5px white;
}
input:focus:valid {
border: solid green 2px;
boxShadow: 0 0 5px green;
}
input:focus:invalid {
border: solid red 2px;
boxShadow: 0 0 5px red;
}
<form action="/action_page.php">
<input type="text" name="username" value="" minLength="6" maxlength="10" required placeholder="Username">
<br><br>
<input type="text" name="password" value="" minLength="8" maxlength="15" required placeholder="Password">
<br><br>
<input type="submit" value="Submit" onclick="function()">
</form>