Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Подтверждение удаления! (https://javascript.ru/forum/events/83716-podtverzhdenie-udaleniya.html)

nameivan 22.02.2022 07:32

Подтверждение удаления!
 
Привет!

На сайте необходимо сделать подтверждение удаления файла. Если использовать простой confirm то все работает

function delete ()
{
 valid = false;
 var del = confirm ('Удалить?');
 if (del == true)
  { valid = true; } else {valid = false; }
 return valid;
}


Но JS может быть отключен либо настройками браузера (а учесть, что программа использоваться будет исключительно во внутренней сети, то рано или поздно АИБы потребуют отключить JS)/

Хочется попробовать прикрутить sweetalert
function delete ()
{
swal({
  title: "Внимание!",
  text: "Удалить файл?",
  icon: "warning",
  buttons: true,
  dangerMode: true,
})
.then((willDelete) => {
  if (willDelete) {
    valid = true; 
  } else {
   valid = false ; 
  }
});
 return valid;
}


Но почему не срабатывает? Если нажать Отмену, то все норм, скрипт останавливается. А еcли же нажать ОК, то тоже ничего не происходит

voraa 22.02.2022 07:48

Цитата:

Сообщение от nameivan
Хочется попробовать прикрутить sweetalert

function delete ()
{
swal({
  title: "Внимание!",
....

А это не тот самый отключенный JS?
Цитата:

Сообщение от nameivan
Но почему не срабатывает?

Потому, что
Строка 17 return valid;
выполняется раньше, чем
строки 11-15

Это асинхронная операция, и вы должны возвращать Promise.
Ну типа просто

function delete ()
{
return swal({
  title: "Внимание!",
  text: "Удалить файл?",
  icon: "warning",
  buttons: true,
  dangerMode: true,
})
}


А вызывать в асинхронной функции
value = await delete()

nameivan 22.02.2022 08:10

Чем дальше, тем непонятнее
Конечно это тоже js, но этот хотя бы пользователь сам не отключит, поставив галочку в окошке.

И как же все-таки сделать? Я не понимаю.
Как в этом
function delete ()
{
return swal({
  title: "Внимание!",
  text: "Удалить файл?",
  icon: "warning",
  buttons: true,
  dangerMode: true,
})
}

использовать value = await delete() ?

voraa 22.02.2022 11:30

Цитата:

Сообщение от nameivan
Конечно это тоже js, но этот хотя бы пользователь сам не отключит, поставив галочку в окошке.

Почему? Он не в браузере выполняется? А где?

Функция swal возвращает Promise, который и возвращается из функции delete

Где то в другой функции (она должна быть асинхронной), где требуется подтверждение удаления файла, вы вызываете

value = await delete()
if (value) {/* удалить файл */}


Можно конечно и так (тогда функцию не обязательно объявлять асинхронной)

delete().then (value =>{ 
   if (value) {/* удалить файл */}
})


Часовой пояс GMT +3, время: 05:45.