Опять же, вы не возвращаете true/false при присоединении из JavaScript.
<input type="email" name="email" id="contact_email" required>
Код (разметка): вам даже не понадобится else/return true.
Это поведение по умолчанию.
/* use SIF/IIFE so that we can shortcut the word "document" and to isolate scope so that we're invisible to other scripts.
Also gives us a namespace in which we can pre-store values speeding up execution.
*/ (function(d) { /* static store variables outside the loop so the "longer" getBy operations aren't called at check time */ /* if you've got a bunch of var, comma delimit don't waste time saying "var" on each and every blasted one! */ var rootEmail = d.getElementById("email"), rootSubject = d.getElementById("subject"), rootMessage = d.getElementById("message"), errorDiv = d.getElementById("error_div"), errorCount ; // DOM flush is faster in most cases than innerHTML='' function flush(element) { while (element.firstChild) element.removeChild(element.firstChild); } // do this on the DOM! WAY faster than innerHTML and no security risks.
function writeError(txt) { errorCount++; errorDiv.appendChild(d.createTextNode(txt)); errorDiv.appendChild(d.createElement('br')); } // writeError function validate(event) { flush(errorDiv); errorCount = 0; if (rootEmail.value == '') writeError('Please enter an email address'); if(rootSubject.value == '') writeError('Please enter a Subject'); if(rootMessage == '') writeError('Please enter your message'); if (errorCount) { console.log(errorDiv.style.display); errorDiv.style.display = "block"; event.preventDefault(); } } // validate // hook our check LAST d.getElementById('myform').addEventListener('submit', validate, false); })(document);
Код (разметка): Примерно так бы я подошел к этому, ЕСЛИ бы я использовал для этого JavaScript.
НО
ЭТИ ПРОВЕРКИ НЕ ЯВЛЯЮТСЯ ДЕЛОМ JAVASCRIPT!!!
Есть ли причина, по которой вы не просто добавляете атрибут «required» в разметку, а вместо этого добавляете сценарии, как будто это все еще 2009 год? Серьезно, НИЧЕГО из того, что вы показали или сделали до сих пор, не гарантирует использование или даже присутствие JavaScript.
Мне нужно было бы увидеть рассматриваемую форму, но, например, если вы хотите, чтобы поле электронной почты было действительным и обязательным, просто:
if(fieldsMissing != ""){ console.log(errorDiv.style.display); errorDiv.style.display = "block"; // you probably shouldn't be doing that errorDiv.innerHTML = fieldsMissing; // you REALLY shouldn't be using innerHTML event.preventDefault(); }
Код (разметка): поскольку тип электронной почты позволяет пользователю вводить только действительные адреса электронной почты, а обязательное поле означает, что оно не может быть пустым.
В любом «современном» браузере и/или IE9/новее он выполнит эти проверки за вас.
НЕ ТРЕБУЕТСЯ СЦЕНАРИЙ.
Проверка форм уже десять лет не входит в сферу деятельности JavaScript, если только вы не выполняете какую-то необычную/нестандартную проверку.