Javascript – диалоговое окно подтверждения после отправки формы

  • Автор темы Gorvik
  • Обновлено
  • 13, May 2024
  • #1
Привет, ребята, Я не специалист по Javascript, поэтому мне нужна помощь в следующем.

У меня есть всплывающее окно с просьбой ввести адрес электронной почты.

Прямо сейчас всплывающее окно просто закрывается после отправки, что не очень приятно для пользователя.

В идеале текстовая панель и кнопка отправки исчезнут и будут заменены коротким комментарием, например «Спасибо, мы свяжемся с вами». Кроме того, я бы хотел, чтобы всплывающее окно закрывалось автоматически через N секунд после отправки.
Вот коды:
HTML:
 
var self = this;
var showDelay = parseInt('[[ bannerShowDelayInMilliseconds ]]' || '0', 10);
setTimeout(function () {
 requestAnimationFrame(function () {
 if (!self.inPreview && "true" == "{{ 'true' if customer.email else 'false' }}") {
 return;
 }
 self.sdk.track('banner', getEventProperties('show', false));
 document.body.insertAdjacentHTML('beforeend', self.html);
 var banner = self.banner = document.querySelector('.subscription-dialog');
 self.backdrop = document.querySelector('.subscription-dialog + .banner-backdrop');
 banner.insertAdjacentHTML('afterbegin', '<style>' + self.style + '</style>');
 var form = banner.querySelector('form');
 form.onsubmit = function () {
 var eventProperties = getEventProperties('subscribe');
 var email = (form.email.value || '').toLowerCase();
 eventProperties.subscription_email = email;
 self.sdk.track('banner', eventProperties);
 if (validateEmail(email)) {
 self.sdk.update({
 email: email
 });
 removeBanner();
 }
 return false;
 };
 var btnClose = banner.querySelector('.close');
 btnClose.onclick = function () {
 removeBanner();
 self.sdk.track('banner', getEventProperties('close'));
 };
 });
}, showDelay);

function getEventProperties(action, interactive) {
 return {
 action: action,
 banner_id: self.data.banner_id,
 banner_name: self.data.banner_name,
 banner_type: self.data.banner_type,
 variant_id: self.data.variant_id,
 variant_name: self.data.variant_name,
 interaction: interactive !== false ? true : false,
 location: window.location.href,
 path: window.location.pathname
 };
}

function removeBanner() {
 if (self.banner) {
 self.banner.parentNode.removeChild(self.banner);
 }
 if (self.backdrop) {
 self.backdrop.parentNode.removeChild(self.backdrop);
 }
}

function validateEmail(email) {
 return email && /^\S+@\S+\.\S+$/.test(email);
}
return {
 remove: removeBanner
};
[/code/
Код (разметка): Javascript:
  <div class="banner subscription-dialog"> <span class="header">[[ headerText ]]</span> <span class="text">[[ bodyText ]]</span> <form> <input name="email" type="text" class="input" placeholder="электронная почта@example.com" pattern="^\S+@\S+\.\S+$" title="адрес электронной почты в формате «[email protected]»"> <input type="submit" class="button" value="[[ buttonTitle ]]" /> </form> <span class="lose"><span class="close-cross"></span></span> </div> <div class="banner-backdrop"></div> 
Код (разметка):

Gorvik


Рег
21 Dec, 2007

Тем
81

Постов
200

Баллов
645
  • 18, May 2024
  • #2
Замените метод removeBanner() в form.onsubmit кодом, который устанавливает все нужные метки, а затем вызовите

 

setTimeout(removeBanner, 3000);


Код (JavaScript): если вам нужна задержка в 3 секунды.
 

Maryel


Рег
01 Jan, 2011

Тем
65

Постов
175

Баллов
510
Тем
403,760
Комментарии
400,028
Опыт
2,418,908