Рассмотрим основные элементы формы и средства для работы с ними.
input, textarea
Для большинства типов input значение доступно на чтение-запись в value:
input.value = "Новое значение"; textarea.value = "Новый текст";
textarea.innerHTMLДля элементов textarea также доступно свойство innerHTML, но лучше им не пользоваться: оно хранит только HTML, изначально присутствовавший в элементе. Кроме того, оно не преобразует HTML-entities.
Например, сравните значения value/innerHTML до того, как что-то ввели (будут разные!) и после (innerHTML не поменяется):
<textarea> <a> </textarea> <script> var area = document.body.children[0]; </script> <button onclick="alert(area.value); alert(area.innerHTML);">Вывести value и innerHTML</button>
input type="checkbox", input type="radio"
Для этих элементов можно узнать или установить текущее «отмеченное» состояние.
Оно находится в свойстве checked (true/false).
if (input.checked) {
alert("Чекбокс выбран");
}
Обратите внимание на разницу значения атрибута и свойства. Атрибут имеет значение «как указано в HTML», а свойство — логическое, в соответствие со стандартом.
<input type="checkbox" checked>
<script>
var input = document.body.children[0];
alert(input.checked); // *!*true*/!*
alert(input.getAttribute('checked')); // *!*пустая строка*/!*
</script>
select, option
Элементы типа select, как и input, поддерживают свойство value.
Он обычно возвращает значение (value) выбранной опции, ну а в случае <select multiple> — значение первой из них.
var selectedOptionValue = select.value;
Элемент селекта в JavaScript можно выбрать двумя путями: поставив значение select.value, либо установив свойство select.selectedIndex:
select.selectedIndex = 0; // первый элементУстановка
selectedIndex = -1 очистит выбор.
Опции доступны через select.options.
Если select допускает множественный выбор (атрибут multiple), то значения можно получить/установить, сделав цикл по select.options:
<form name="form">
<select name="genre" *!*multiple*/!*>
<option value="blues" selected>Мягкий блюз</option>
<option value="rock" selected>Жёсткий рок</option>
<option value="classic">Классика</option>
</select>
</form>
<script>
var form = document.body.children[0];
var select = form.elements.genre;
for (var i=0; i<select.options.length; i++) {
var option = select.options[i];
*!*
if(option.selected) {
alert(option.value);
}
*/!*
}
</script>
Спецификация: HTMLSelectElement.
new OptionВ стандарте the Option Element есть любопытный короткий синтаксис для создания элемента с тегом option:
option = new Option( text, value, defaultSelected, selected);
Создаётся обычный DOM-элемент, как document.createElement('option'), но сразу с содержимым text и значением value:
option = new Option("Текст", "value");
// создаст <option value="value">Текст</option>
Если хочется сделать его выбранным, то последние два аргумента нужно поставить в true:
option = new Option("Текст", "value", true, true);
option
У option есть особые свойства, которые могут оказаться полезными (см. The Option Element):
selected- выбрана ли опция
index- номер опции в списке селекта
text- Текстовое содержимое опции (то, что видит посетитель).
Практика
Есть селект:
<select> <option value="Rock">Рок</option> <option value="Blues" selected>Блюз</option> </select>
При помощи JavaScript:
- Выведите значение и текст текущей выбранной опции.
- Добавьте опцию:
<option value="Classic">Классика</option>. - Сделайте её выбранной.
Решение:
<select>
<option value="Rock">Рок</option>
<option value="Blues" selected>Блюз</option>
</select>
<script>
var select = document.body.children[0];
// 1)
var selectedOption = select.options[select.selectedIndex];
alert(selectedOption.value);
// 2)
var newOption = new Option("Classic", "Классика");
select.appendChild(newOption);
// 3)
newOption.selected = true;
</script>
Напишите функцию validate(form), которая проверяет содержимое формы по клику на кнопку «Проверить».
Ошибки:
- Одно из полей не заполнено.
- Пароли не совпадают.
Ошибка должна сопровождаться сообщением. Например:
Исходный документ: tutorial/form/validate-src.html.
Решение: tutorial/form/validate.html.
Комментарии
- Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
- Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
- Комментарии без смысла, с рекламой или не о статье вообще - удаляются.