Почему не работают мои вложенные операторы if и else? - PullRequest
3 голосов
/ 03 ноября 2011

Все, что я хочу сделать, это проверять электронную почту каждый раз, когда пользователь вводит новый символ в поле ввода. Когда поле ввода пустое, оно не должно ничего показывать, но когда оно содержит буквы, оно должно показывать, где находятся недопустимые символы.

Мой код работает, но ничего не показывает, когда поле ввода пусто, потому что он использует вложенное «else» вместо того, которое он должен использовать. кто-нибудь поможет? заранее спасибо. andyy

var tick = "<img src='images/tick.png' width='20' height='20'/>";
var cross = "<img src='images/cross.png' width='20' height='20'/>";
var email_element = document.contact_form.email_field.value;
function validate_email(id) {
     if ( email_element != '' ) {
        var letters = /^[A-Za-z]+$/;
        if ( document.contact_form.email_field.value.match(letters) )
        {
            document.getElementById(id).innerHTML = tick;
                valid = true;
        } else {
            document.getElementById(id).innerHTML = cross;
            valid = false;
        }
    } else {
        document.getElementById(id).innerHTML = '';
    }
    return valid;
}

Ответы [ 3 ]

3 голосов
/ 03 ноября 2011

Скорее всего, проблема в этой строке:

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.)

2 голосов
/ 03 ноября 2011

При установке email_element вы получаете значение один раз, копируя, потому что это строка. Поэтому, если при загрузке страницы это поле пустое, email_element теперь имеет значение '' и остается на нем, пока вы не установите его снова.

Теги установлены по ссылке, поэтому вы, вероятно, предполагали:

var email_element = document.contact_form.email_field;
. . .
if(email_element.value != '')
2 голосов
/ 03 ноября 2011

Попробуйте заменить выражение email_element != '' на document.contact_form.email_field.value != '', так как я подозреваю, что email_element является ссылкой на элемент и никогда не будет равно ''. А еще лучше, создайте локальную переменную email_value, присвойте ей значение document.contact_form.email_field.value и используйте ее в обоих местах, например,

function validate_email(id) {
  var email_value = document.contact_form.email_field.value;
  if ( email_value != '' ) {         
    var letters = /^[A-Za-z]+$/;
    if ( email_value.match(letters) ) {
       document.getElementById(id).innerHTML = tick;
       valid = true;
    }
    else {
      document.getElementById(id).innerHTML = cross;
      valid = false;
   }
  } 
  else {
    document.getElementById(id).innerHTML = '';
  }
  return valid; 
} 
...