Dom7 — это лёгкая и быстрая библиотека для работы с DOM, которая часто используется вместе с фреймворком Framework7. Она предоставляет удобный интерфейс для работы с элементами страницы, включая формы, обработку событий и отправку данных на сервер без перезагрузки страницы.
Для работы с формой в Dom7 используется стандартный селектор
$, аналогичный jQuery:
var form = $('form#myForm'); // выбираем форму по ID
var inputs = form.find('input, textarea, select'); // выбираем все поля внутри формы
Метод find() позволяет искать вложенные элементы
относительно выбранного родителя, что особенно удобно для работы с
большими формами.
Чтобы перехватить стандартное поведение формы и отправить данные
через AJAX, используется событие submit:
form.on('submit', function(e) {
e.preventDefault(); // предотвращаем стандартную отправку
var formData = form.serialize(); // собираем данные формы
sendData(formData);
});
Метод serialize() собирает все поля формы в строку вида
ключ=значение&ключ2=значение2. Это удобно для отправки
данных в формате application/x-www-form-urlencoded.
Для выполнения AJAX-запроса можно использовать встроенный объект
XMLHttpRequest или библиотеку Dom7 в комбинации с нативными
средствами. Пример отправки данных с обработкой ответа:
function sendData(data) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/submit', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onreadystatecha nge = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status < 300) {
console.log('Ответ сервера:', xhr.responseText);
} else {
console.error('Ошибка отправки формы:', xhr.statusText);
}
}
};
xhr.send(data);
}
FormData для отправки файловЕсли форма содержит файлы (<input type="file">),
лучше использовать объект FormData, который автоматически
собирает все поля формы:
form.on('submit', function(e) {
e.preventDefault();
var formData = new FormData(form[0]); // form[0] — нативный элемент формы
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload', true);
xhr.onl oad = function() {
if (xhr.status === 200) {
console.log('Файлы успешно загружены');
} else {
console.error('Ошибка загрузки файлов');
}
};
xhr.send(formData);
});
Особенности FormData:
multipart/form-data.formData.append('key', 'value').Перед отправкой рекомендуется проверять введённые данные. Dom7 позволяет легко получать значения полей:
var name = form.find('input[name="name"]').val();
var email = form.find('input[name="email"]').val();
if (!name || !email) {
console.error('Все поля обязательны для заполнения');
return;
}
Метод val() возвращает текущее значение поля или
устанавливает его, если передан аргумент.
Можно обернуть AJAX-запрос в промис для более удобного управления асинхронными операциями:
function sendDataAsync(data) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/submit', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onl oad = function() {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(xhr.responseText);
} else {
reject(xhr.statusText);
}
};
xhr.oner ror = function() {
reject('Сетевая ошибка');
};
xhr.send(data);
});
}
form.on('submit', function(e) {
e.preventDefault();
var formData = form.serialize();
sendDataAsync(formData)
.then(function(response) {
console.log('Ответ сервера:', response);
})
.catch(function(error) {
console.error('Ошибка отправки:', error);
});
});
После отправки формы часто требуется отобразить пользователю результат. Dom7 позволяет легко изменять DOM:
sendDataAsync(formData)
.then(function(response) {
form.find('.status-message').text('Данные успешно отправлены').addClass('success');
})
.catch(function(error) {
form.find('.status-message').text('Ошибка: ' + error).addClass('error');
});
Использование методов text() и addClass()
делает обновление интерфейса быстрым и лаконичным.
Если на странице несколько форм с одинаковыми классами, можно привязать обработчик ко всем сразу:
$$('form.ajax-form').on('submit', function(e) {
e.preventDefault();
var form = $(this);
var formData = form.serialize();
sendDataAsync(formData)
.then(response => form.find('.status-message').text('Успешно'))
.catch(error => form.find('.status-message').text('Ошибка'));
});
Использование $$ выбирает все элементы с указанным
селектором, а $(this) позволяет работать с конкретной
формой, вызвавшей событие.
Dom7 поддерживает делегирование событий, что важно для форм, добавляемых в DOM после загрузки страницы:
$(document).on('submit', 'form.dynamic-form', function(e) {
e.preventDefault();
var form = $(this);
var formData = form.serialize();
sendDataAsync(formData)
.then(response => form.find('.status-message').text('Данные отправлены'))
.catch(error => form.find('.status-message').text('Ошибка'));
});
Такой подход гарантирует, что обработчик сработает даже для элементов, созданных динамически.
val().on('submit', ...).serialize() и
FormData.XMLHttpRequest или
промисов.text(),
addClass(), removeClass().Эти инструменты делают Dom7 удобным и эффективным решением для организации AJAX-отправки форм и обработки данных на клиентской стороне.