Привет!
На сайте все формы отправляются так:
Типовая форма:
<form class="enter">
<input type="text">
<button type="submit">Enter</button>
</form>
Отправка:
// берем форму
const enterForm = document.querySelector('.enter');
// вешаем на форму событие при отправке
enterForm.addEventListener('submit', sender);
// УНИВЕРСАЛЬНЫЙ СКРИПТ ОТПРАВКИ ВСЕХ ФОРМ
function sender(e) {
e.preventDefault();
// Берем все данные из отправляемой формы, здесь она в this
var formData = new FormData(this);
// Собираем объект из данных формы
formData.forEach(function (value, key) {
object[key] = value;
});
var xhr = new XMLHttpRequest();
xhr.open('POST', './func/functions.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Отправляем объект в виде JSON
xhr.send('param=' + JSON.stringify(object));
xhr.addEventListener("readystatechange", () => {
console.log(xhr.response);
}
});
}
Однако, столкнулся с проблемой потери this из лексического пространства, если отправлять форму кнопкой вне формы:
<form class="otherForm">
<input type="text">
</form>
<button class="otherBtn">Other</button>
ВОПРОС: как сохранить this при отправке формы через общий XMLHttpRequest, если кнопка отправки вне формы ?
Безуспешно пробовал через цепочку функций. Кнопка вызывает отправку формы
document.querySelector('.otherBtn').addEventListener('click', otherSend);
function otherSend() {
document.querySelector('.otherForm').submit();
}
document.querySelector('.otherForm').addEventListener('click', sender);