|
Профессиональный веб-дизайн: Введение в современные веб-технологии "3. Создание внешней таблицы. Теперь создайте таблицу с двумя строками. Во второй строке создайте две ячейки - в первую переместите таблицу цифр, а во вторую - таблицу знаков." Как в ячейку <td> поместить таблицу? Таблица же сама состоит из ячеек. Исходя из задания следует, что <td> может быть родителем для <td>, но это противоречит правилам HTML? |
HTML-формы
Проверку правильности и полноты ввода данных осуществляет следующий сценарий, помещенный в файл form.js и подключенный к форме при помощи элемента script в элементе head.
/*
Объявляем переменную для формы. В этот момент мы не можем связать ее с объектом, поскольку документ еще не до конца загружен
*/
var oForm = null;
/*
Объявляем функцию, которая будет вызываться при попытке
отправить данные на сервер (пользователь нажал кнопку submit)
*/
function Validate() {
// Очищаем результаты предыдущей проверки
//Функция ClearErrors определена ниже
ClearErrors();
var result = true; // результат проверки формы
// Находим элемент, в который будут записываться ошибки
var oErrors = document.getElementById('errors');
// и очищаем его содержимое
oErrors.innerHTML = '';
//Проверяем Имя пользователя
if (!oForm.username.value) {// В поле username ничего не введено
// проверка не прошла
result = false;
//добавляем описание ошибки
oErrors.innerHTML += '<li>Введите имя пользователя</li>';
// помечаем элемент
oForm.username.style.borderColor = 'red';
//поместить фокус ввода в поле ввода и выделить все содержимое
oForm.username.select();
} // в противном случае не делать ничего
//Проверяем пароль
if (!oForm.pwd.value) {
oErrors.innerHTML += '<li>Введите пароль</li>';
oForm.pwd.style.borderColor = 'red';
if (result) {// элемент с ошибкой не был до этого найден
oForm.pwd.select();
}
result = false;
}
// Проверяем совпадение введенных паролей
// Поле подтверждения пароля не имеет атрибута name,
// поэтому мы не можем получить его через oForm.pwd1
// Используем поиск в документе по атрибуту id
var oPwd1 = document.getElementById('pwd1');
if (!oPwd1.value) {// поле пусто
oErrors.innerHTML += '<li>Подтвердите пароль</li>';
oPwd1.style.borderColor = 'red';
if (result) {
oPwd1.select();
}
result = false;
}
else // поле не пусто
if (oPwd1.value != oForm.pwd.value) {// пароли не совпадают
oErrors.innerHTML += '<li>Пароли должны совпадать</li>';
oPwd1.style.borderColor = 'red';
if (result) {
oPwd1.select();
}
result = false;
}
// Группа переключателей представляет собой массив элементов.
// Мы должны проверить каждый
var genderSelected = false;
for (var i = 0, n = oForm.gender.length; i < n; i++) {
if (oForm.gender[i].checked) {// найден выбранный элемент
genderSelected = true;
// нет необходимости продолжать
break;// выход из цикла
}
}
if (!genderSelected) {// ни один из переключателей не выбран
oErrors.innerHTML += '<li>Укажите пол</li>';
if (result) {
// элемент input type=radio не имеет метода select()
// помещаем фокус ввода в первый элемент группы
oForm.gender[0].focus();
}
result = false;
}
if (!oForm.agree.checked) {
oErrors.innerHTML += '<li>Вы должны согласиться с условиями</li>';
if (result) {
// элемент input type=checkbox не имеет метода select()
// помещаем фокус ввода в этот элемент
oForm.agree.focus();
}
result = false;
}
// Проверка закончена.
// Если result == false, отправка данных отменяется
return result;
}// function Validate
//вспомогательная функция очистки формы
function ClearErrors() {
// Находим элемент, в который записываются ошибки
var oErrors = document.getElementById('errors');
// и очищаем его содержимое
oErrors.innerHTML = '';
oForm.username.style.borderColor = '';
oForm.pwd.style.borderColor = '';
document.getElementById('pwd1').style.borderColor = '';
}
// Функция, которая автоматически вызывается
// по окончании загрузки документа в окно браузера
window.onload = function() {
// документ загружен, и мы можем найти внем форму.
oForm = document.forms[0];
// Событие onkeyup происходит, когда пользователь
// отпускает клавишу в поле текстового ввода
oForm.username.onkeyup =
oForm.pwd.onkeyup =
document.getElementById('pwd1').onkeyup =
function() {// футкция обрабатывает событие любого из трех элементов
// this является ссылкой на элемент, который вызвал событие
// id вспомогательных элементов сделаны так, чтобы легко вычислись
// из имени элемента-источника события
//если атрибут name отсутствует или пуст,
//будет использован id (this.name || this.id)
var elem = document.getElementById('span' + (this.name || this.id));
elem.innerHTML = this.value.length + ' из ' + this.maxLength;
elem.style.display = 'inline';
}; // onkeyup
// Событие onblur происходит, когда элемент теряет фокус ввода
oForm.username.onblur =
oForm.pwd.onblur =
document.getElementById('pwd1').onblur =
function() {
var elem = document.getElementById('span' + (this.name || this.id));
// Скрываем вспомогательный элемент
elem.style.display = '';
}; // onblur
// Событие onreset происходит, когда пользователь
// нажимает кнопку Reset (Очистить форму)
oForm.onreset = function() {
// Производим дополнительную очистку.
// Содержимое полей очищается автоматически
ClearErrors();
oForm.username.focus();
}; // onreset
// активируем ввод в поле Имя пользователя
oForm.username.focus();
} // window.onloadПодобную проверку рекомендуется производить во всех случаях, когда ожидается ввод со стороны пользователя, однако она не заменяет и не отменяет необходимости выполнить еще одну проверку на стороне сервера. Фактически, проверка данных в браузере делается лишь для удобства пользователя (убедиться, что необходимые данные введены и отвечают формальным требованиям) и уменьшения сетевого трафика (заведомо ошибочные данные не будут отправлены на сервер). Ни в коем случае нельзя проверять в браузере имя пользователя и его пароль – только наличие таких данных.
Безопасность форм
Неправильное использование HTML-форм может существенно повредить безопасности веб-приложения. Данные формы, передаваемые через HTTP протокол, не шифруются и могут быть перехвачены и изменены при передаче. Для передачи конфиденциальных данных, таких как имена пользователей, пароли, номера кредитных карточек и т.д., следует использовать HTTPS (Secure Hypertext Transfer Protocol). Это поможет обезопасить данные ваших пользователей.
С другой стороны, недобросовестный пользователь может пытаться использовать вашу форму для нарушения работы веб-приложения или кражи информации с сервера. Фактически, веб-страницы доступны неопределенно большому числу лиц, и наиболее безопасно рассматривать каждый запрос к серверу как потенциальное покушение на его безопасность (пусть даже это противоречит презумпции невиновности). С практической точки зрения, следует
- ограничивать и проверять длину данных, вводимых в текстовые поля ( input type="text", input type="password", textarea ).
- ограничивать пользовательский ввод только допустимыми символами (например, буквами и цифрами), не допуская тэгов и специальных символов.
- иметь в виду, что проверка данных на стороне клиента (в браузере) служит лишь для удобства пользователя и может быть достаточно легко отключена.
Вопросы
- Что такое HTML-форма? Для чего она предназначена?
- Какие специфические атрибуты имеет форма?
- Данные каких элементов управления отправляются на сервер?
- Перечислите и охарактеризуйте элементы управления формы.
- Перечислите и охарактеризуйте атрибуты элемента текстового ввода.
- Как получить программный доступ к объекту form?
- Перечислите основные методы и события объекта form.
- Перечислите основные методы и события элементов формы.