Скорее всего, проблема в этой строке:
var email_element = document.contact_form.email_field.value;
Вы назначаете глобальную переменную, равную значению поля электронной почты, и никогда больше не обновляете эту переменную. Это не создает «активную» ссылку на текущее значение поля, оно просто сохраняет значение таким, каким оно было при выполнении этой строки. Это, в свою очередь, означает, что первый оператор if
в вашей функции, if ( email_element != '' )
, оценивает не текущее значение поля электронной почты.
Переместите эту строку, чтобы она была первой внутри вашей функции, а затем каждый раз, когда функция запускается, вы получите последнее (текущее) значение этого поля.
РЕДАКТИРОВАТЬ: Кроме того, вы не присваиваете значение valid
в не вложенных других. Вы должны объявить valid
как локальную переменную в функции и обязательно установить ее соответствующим образом в каждой ветви if и else (или по умолчанию это значение false, когда вы объявляете ее). Как томасрутер
сказал, что вы в настоящее время не декларируете valid
с оператором var
в своей функции, что означает, что он будет создан как глобальная переменная, что, в свою очередь, означает, что когда вы не дадите ему значение в своем не вложенном другом Ваша функция вернет любое значение valid
, которое уже было при предыдущем вызове. (И действительно, основываясь на опубликованном вами коде, вам вообще не нужна переменная valid
: вы можете просто сказать return true;
или return false;
непосредственно внутри каждой ветви вашей структуры if / else.)