Подтверждающие значения устанавливаются в виде предупреждения (множественный ввод) с помощью Async

#javascript #jquery #sweetalert #sweetalert2

#javascript #jquery #sweetalert #sweetalert2

Вопрос:

Я пытаюсь добавить проверку к модальному режиму с несколькими вводами, который я настроил с помощью SweetAlert2.

Я использую приведенный ниже код, измененный из https://sweetalert2.github.io/#multiple-inputs

  jQuery('body').on('click', '#feedback', async function () {
  const {value: feedback} = await swal.fire ({
  title: 'Send us your feedback!',
  showCancelButton: true,
  confirmButtonText: 'Submit',
  denyButtonText: 'Cancel',
    customClass: {
    content:'full-width'
    },
    html:
    '<input id="ratingValue" type="text" />' 
    '<input id="topicValue" type="text" />' 
    '<input id="comment" type="text" />'
     ,
    preConfirm: () => ({
      rating: jQuery('#ratingValue').val(),
      topic: jQuery('#topicValue').val(),
      comment: jQuery('#comment').val()
      
    })
  }).then((result) => {
      console.log(JSON.stringify(feedback));
      if(feedback.rating != "" amp;amp; feedback.topic != ""){
         Swal.fire('Submitted!', '', 'success')
      }
  });
 

Очевидно, у меня проблема, я передаю объект обратной связи в качестве параметра pass by promise, поэтому я не могу попытаться вызвать его из состояния (then), поскольку переменная еще не инициализирована, и я получаю сообщение об ошибке. Есть ли какой-либо обходной путь для этого? Я хотел бы проверить свои входные данные перед отправкой и иметь возможность разрешить пользователю исправлять себя.

Большое спасибо!

Ответ №1:

.on('click' принимает функцию обратного вызова, она не возвращает обещание, поэтому вы не можете просто привязаться .then() к ней. Я думаю, вы можете сделать что-то подобное :

 jQuery('body').on('click', '#feedback', clickHandler);

const clickHandler = async () => {

  const feedback = await swal.fire({...});

  console.log(JSON.stringify(feedback));
  if (feedback.rating != "" amp;amp; feedback.topic != "") {
    Swal.fire('Submitted!', '', 'success')
  }
}
 

Комментарии:

1. Привет, это решает часть проверки, но она по-прежнему закрывает модальный swal при «отправке». Я пытаюсь выяснить, возможно ли предотвратить модальное закрытие по умолчанию.