Библиотека jQuery предоставляет унифицированный интерфейс для доступа
к значениям текстовых полей, переключателей, списков и других элементов
формы. Главный принцип — использование метода .val(),
который позволяет как считывать, так и устанавливать значения.
Текстовые поля, области ввода и скрытые поля возвращают строку. Метод
.val() обращается к текущему состоянию DOM и поэтому всегда
возвращает актуальное значение.
// Чтение значения текстового поля
var name = $('#username').val();
При необходимости значение приводится к числу уже в логике приложения:
var age = Number($('#age').val());
<textarea>Для <textarea> метод остаётся тем же и возвращает
содержимое без каких-либо дополнительных преобразований.
var commentText = $('textarea#comment').val();
Важно учитывать наличие переноса строк, который остаётся в строке неизменным.
Логика работы с радиокнопками и чекбоксами отличается от текста тем, что важным является булево состояние и выбранное значение.
input[type="radio"])Радиокнопки объединяются по имени. Получение выбранного значения:
var selected = $('input[name="gender"]:checked').val();
Возвращается значение атрибута value выбранного
элемента.
input[type="checkbox"])Чекбокс может иметь либо одно, либо несколько значений в зависимости от разметки. Для одиночного варианта используется проверка состояния:
var subscribed = $('#news').prop('checked');
При множественном выборе требуется собрать набор значений:
var roles = $('input[name="roles[]"]:checked')
.map(function() { return $(this).val(); })
.get();
<select>Для одиночного выбора значение возвращается как строка:
var country = $('#country').val();
Для множественного выбора возвращается массив выбранных значений:
var langs = $('#languages').val(); // ['en', 'de', 'fr']
Часто требуется собрать набор значений сразу. Библиотека jQuery предоставляет готовый механизм сериализации.
.serialize()Возвращает строку в формате URL-параметров:
var params = $('#profileForm').serialize();
// например: "name=Alex&age=30"
Такой формат удобен для передачи через AJAX-запросы.
.serializeArray()Возвращает массив объектов, каждый из которых содержит пару
name и value:
var data = $('#profileForm').serializeArray();
/*
[
{name: "name", value: "Alex"},
{name: "age", value: "30"}
]
*/
Этот вариант удобен при преобразовании в собственные структуры данных.
Значения, изменённые пользователем, доступны немедленно. При работе с
динамически созданными формами рекомендуется учитывать, что элементы
должны быть добавлены в DOM до вызова .val() или методов
сериализации.
.val() и .prop() при работе с состоянием
элементов.val() возвращает или устанавливает значение элемента
формы..prop() обрабатывает свойства DOM-узла, такие как
checked, selected или
disabled.// Получение состояния
var isDisabled = $('#submit').prop('disabled');
Использование .prop() предпочтительно для булевых
свойств, тогда как .val() служит для получения
пользовательских данных.
Получение и установка значений обычно идут в паре, особенно при
подготовке форм к редактированию. Метод .val() принимает
строку или массив (для множественного выбора):
$('#username').val('NewUser');
$('#languages').val(['en', 'fr']);
Установка значения влияет на последующее получение данных без перезагрузки страницы.
Получение значения зачастую происходит в обработчиках событий
change, input и submit. jQuery
предоставляет удобный механизм подписки:
$('input, select, textarea').on('change', function() {
var current = $(this).val();
// дальнейшая обработка значения
});
Использование событий позволяет актуализировать данные в режиме реального времени.
.val() является универсальным интерфейсом для
работы с данными форм..prop()..serialize() и .serializeArray() упрощают
сбор данных целой формы.