#javascript #nested #if-statement
#javascript #вложенный #if-statement
Вопрос:
Все, что я хочу иметь возможность делать, это проверять электронное письмо каждый раз, когда пользователь вводит новый символ в поле ввода. Когда поле ввода пустое, оно не должно ничего показывать, но когда оно содержит буквы, оно должно показывать, где находятся недопустимые символы.
Мой код работает, но ничего не показывает, когда поле ввода пустое, потому что он использует вложенное ‘else’ вместо того, которое он должен использовать. кто-нибудь помогает? заранее спасибо. и да
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;
}
Комментарии:
1. Что такое
email_element
? Разве вы не должны тестироватьdocument.contact_form.email_field.value
?2. Показывает ли веб-консоль какие-либо ошибки?
3. о, извините, хаха, забыл включить его var email_element = document.contact_form.email_field.value;
4. Нет точек, подчеркиваний, цифр и т. Д. разрешено? Хммм.
5. так должно ли это технически работать??
Ответ №1:
Проблема, скорее всего, в этой строке:
var email_element = document.contact_form.email_field.value;
Вы присваиваете глобальную переменную, равную значению поля email, а затем никогда не обновляете эту переменную снова. Это не создает «активную» ссылку на текущее значение поля, оно просто сохраняет значение таким, каким оно было при выполнении этой строки. Что, в свою очередь, означает, что первый if
оператор в вашей функции, if ( email_element != '' )
, вычисляет текущее значение поля email .
Переместите эту строку так, чтобы она была первой внутри вашей функции, и тогда при каждом запуске функции вы будете получать последнее (текущее) значение этого поля.
РЕДАКТИРОВАТЬ: Кроме того, вы не присваиваете значение valid
в не вложенном else . Вы должны объявить valid
как локальную переменную в функции и обязательно установить ее соответствующим образом в каждой ветви if и else (или по умолчанию она имеет значение false при ее объявлении). Как сказал thomasrutter, в настоящее время вы не объявляете valid
var
оператор в своей функции, что означает, что он будет создан как глобальная переменная, что, в свою очередь, означает, что когда вы не присваиваете ему значение в вашем не вложенном else, ваша функция вернет любое значение valid
, которое уже было получено из предыдущего вызова. (И действительно, основываясь на опубликованном вами коде, вам вообще не нужна valid
переменная: вы могли бы просто сказать return true;
или return false;
непосредственно внутри каждой ветви вашей структуры if / else .)
Ответ №2:
Попробуйте заменить выражение 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;
}
Ответ №3:
При настройке email_element вы получаете значение один раз, путем копирования, потому что это строка. Поэтому, если при загрузке страницы это поле пустое, для email_element теперь установлено значение » и остается установленным до тех пор, пока вы не установите его снова.
Теги устанавливаются по ссылке, поэтому вы, вероятно, имели в виду:
var email_element = document.contact_form.email_field;
. . .
if(email_element.value != '')