@ZaxapKramer
Больной верстальщик

Как осуществить событие отправки формы (form.submit()) без перезагрузки страницы?

Делаю так:
document.getElementById("form").addEventListener('submit', function(e) {
    e.preventDefault();
    console.log("Form has submited");
});

document.getElementById("btn").addEventListener('click', function(e) {
    document.getElementById("form").submit(); // .submit(function(e){e.preventDefault()}) // .submit(false) - ничего не меняется...
})


При обычной отправке формы все в порядке. Тем не менее, при нажатии на кнопку все равно происходит перезагрузка страницы. Как решить эту проблему?
  • Вопрос задан
  • 5921 просмотр
Решения вопроса 1
workDNK
@workDNK
Разработчик интернет-магазинов на 1С-Битрикс
Предполагаю, что в случае кнопки в данном случае нужно использовать не .submit(), а trigger("submit")
Тогда будет вызван верхний обработчик 'submit', который запретит отправку формы. Можно в конце обработчика еще написать
return false;

https://learn.javascript.ru/forms-submit
Чтобы отправить форму на сервер из JavaScript – нужно вызвать на элементе формы метод form.submit().
При этом само событие submit не генерируется. Предполагается, что если программист вызывает метод form.submit(), то он выполнил все проверки.


UPD

Не часто пользуюсь нативным js, а вышеуказанный код предназначен для jQuery
Проверил код, который ниже, работает.

<form id="form" method="GET">
	<input type="text"/>
	<button id="form-btn">Button</button>
</form>
<button id="btn">Button</button>


document.getElementById("form").addEventListener('submit', function(e) {
    e.preventDefault();
    console.log("Form has submited");
});
document.getElementById("btn").addEventListener('click', function(e) {
	var ev = new Event("submit");
    console.log("Btn click");
    document.getElementById("form").dispatchEvent(ev);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект