Чтение онлайн

на главную - закладки

Жанры

Основы программирования на JavaScript

Кан Марк

Шрифт:

5 переходит к шагу 2, пока выполняется условие i<radios.length . Это условие не выполнится после шестого выполнения цикла, когда i=6.

Существует другой тип цикла, который сейчас будет рассмотрен, - так называемый цикл while. Следующий код делает то же самое, что и предыдущий цикл:

var i=0;

while(i<radios.length){

if(radios[i].checked) return true;

i++;

}

alert('Вы должны выбрать цвет!');

return false;

Можно видеть, что здесь в цикле while

присутствуют точно те же 3 фрагмента кода, которые имелись в цикле for: "var i=0 ", "i<radios.length " и "i++ ". Единственное отличие состоит в их размещении. В цикле while только проверка

i<radios.length

чем-то отличается от того, что было написано раньше. Эта проверка происходит в скобках сразу после while. Переменные инициализируются перед циклом while, а увеличение i, i++, происходит внутри цикла.

В этих циклах осталось объяснить еще одну вещь: if(radios[i].checked). Переменная radios содержит массив радио-кнопок с именем color. Массивы будут рассмотрены в следующей лекции, а здесь дадим упрощенное объяснение: radios[0] возвращает первую радио-кнопку, radios[1] возвращает вторую, radios[2]– третью, и т.д. до radios[5], который возвращает шестую кнопку. Если кнопок будет больше, например, 100, то radios[99] будет обращаться к 100– ой радио-кнопке.

Все эти числа могут показаться странными. Почему radios[5] обращается к шестой радио-кнопке? В JavaScript, как и во многих других языках программирования, многие вещи начинаются с числа 0, а не с 1. Это просто один из таких случаев, но это встретится еще не раз. Поэтому 0 является в действительности первым элементом, 1– вторым, и т.д.

В форме осталось проверить еще ввод адреса e-mail. Это в действительности достаточно сложное для проверки поле, и правильная ее реализация выходит за рамки того, что изучается в этой лекции, но можно выполнить некоторую базовую проверку. Что нужно сделать? Мы знаем, что любой адрес e-mail должен содержать один и только один символ @. Он должен также содержать по крайней мере одну точку после символа @ (точка отделяет имя домена от домена верхнего уровня, например, "intuit.ru ").

function validateForm{

var email = document.forms.tutform.elements.email.value;

if(email.indexOf('@')<0){

alert('В адресе e-mail должен присутствовать символ @');

return false;

} else if(email.indexOf('@') != email.lastIndexOf('@')){

alert('В адресе e-mail не может быть больше одного символа @');

return false;

} else if(email.indexOf('.')<0){

alert('В адресе e-mail должна присутствовать хотя бы одна точка.');

return false;

} else if(email.lastIndexOf('.')<email.indexOf('@')){

alert('В

адресе e-mail должна присутствовать хотя бы одна точка после символа @');

return false;

}

return true;

}

Здесь имеются две новые сходные функции, которые требуют пояснения. Функция indexOf возвращает число, определяющее позицию одной строки в другой строке. 'abcdef'.indexOf('a') вернет 0 (здесь 0 снова означает первую позицию). 'abcdef'.indexOf('cdef') вернет 2, а 'abcdef'.indexOf('aaa') вернет – 1. – 1 означает, что строка не найдена. Во многих случаях возвращается – 1, когда функция не может получить результат.

Аналогично, функция lastIndexOf возвращает позицию последнего вхождения одной строки в другую. 'abcba'.lastIndexOf('a') вернет 4, в то время как 'abcba'.indexOf('a') вернет 0.

Поэтому в нашем коде первый оператор if проверяет, что в адресе e-mail имеется хотя бы один символ '@'. Если такого символа нет, то email.indexOf('@') вернет – 1 и оператор if вернет false.

Следующий оператор соединяет indexOf и lastIndexOf. Если в адресе e-mail имеется более одного символа @, то две эти функции вернут различные значения, как в приведенном выше примере с 'abcba'. Если имеется только один символ @, то эти функции вернут одно и то же значение. Поэтому мы проверяем эти значения на неравенство.

Третий оператор по сути идентичен первому, только он проверяет '.', а не '@'.

Наконец, четвертый оператор if проверяет, что в адресе e-mail имеется как минимум одна точка после символа @.

Недостаток этого метода состоит в том, что простая строка "@." пройдет проверку. Должно быть очевидно, что она не является допустимым адресом e-mail. Существует другой метод для проверки адреса e-mail и для проверки множества других вещей. Это делается с помощью так называемых "регулярных выражений". Хотя регулярные выражения здесь рассматриваться не будут, ниже приведен пример проверки адреса e-mail, который остается читателю для анализа в качестве упражнения.

function validateForm{

var email = document.forms.tutform.elements.email.value;

if(!(/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.

[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/.test(email))){

alert('Пожалуйста, введите допустимый адрес e-mail');

return false;

}

return true;

}

Как можно видеть, использование регулярного выражения приводит к более короткому (и более надежному) коду проверки, но он является и существенно более сложным!

Поделиться:
Популярные книги

На границе империй. Том 10. Часть 1

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 1

Законы Рода. Том 3

Андрей Мельник
3. Граф Берестьев
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 3

Гость из будущего. Том 2

Порошин Влад
2. Гость из будущего
Фантастика:
юмористическая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Гость из будущего. Том 2

Графиня с изъяном. Тайна живой стали

Лин Айлин
Фантастика:
фэнтези
героическая фантастика
киберпанк
5.00
рейтинг книги
Графиня с изъяном. Тайна живой стали

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Законник Российской Империи. Том 2

Ткачев Андрей Юрьевич
2. Словом и делом
Фантастика:
городское фэнтези
альтернативная история
аниме
дорама
6.40
рейтинг книги
Законник Российской Империи. Том 2

Князь

Шмаков Алексей Семенович
5. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
5.00
рейтинг книги
Князь

Первый среди равных. Книга IV

Бор Жорж
4. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IV

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Низший - Инфериор. Компиляция. Книги 1-19

Михайлов Дем Алексеевич
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
5.00
рейтинг книги
Низший - Инфериор. Компиляция. Книги 1-19

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего

Отморозок 4

Поповский Андрей Владимирович
4. Отморозок
Фантастика:
попаданцы
фантастика: прочее
5.00
рейтинг книги
Отморозок 4