Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   confirm срабатывает раньше кода выше (https://javascript.ru/forum/misc/78306-confirm-srabatyvaet-ranshe-koda-vyshe.html)

MC-XOBAHCK 23.08.2019 18:05

confirm срабатывает раньше кода выше
 
Вот код:
comment.classList.add('comment-delete');

let questionDelete = confirm("Удалить комментарий?");

if (questionDelete) { ...


Оформляю удаляемый комментарий, добавляя ему методом classList.add класс comment-delete. Это нужно чтобы подсветить какой комментарий удаляется.
После добавления класса идёт запрос confirm для подтверждения.

Проблема в том что confirm срабатывает раньше чем элементу добавляется класс, то есть раньше кода находящегося выше.

Как это обойти? сеттаймаут ставить для конфирма или есть какие другие решения?

рони 23.08.2019 18:25

MC-XOBAHCK,
строка 2
document.documentElement.clientWidth;

MC-XOBAHCK 23.08.2019 18:33

рони, я извиняюсь, не понял вашего намёка.
Нужно вставить эту строку чтобы она оттянула выполнение confirm ?

рони 23.08.2019 18:37

MC-XOBAHCK,
попробуйте и напишите результат.

MC-XOBAHCK 23.08.2019 18:42

Если вставляю эту строку, не помогает. Классы добавляются только после закрытия диалогового окна. Ну а там уже на автомате идёт ajax-запрос и удаление комментария.

Единственное, у меня в оригинале добавляются три класса:
comment.classList.add('comment-delete', 'border', 'border-danger');

рони 23.08.2019 18:47

MC-XOBAHCK,
увы, не работает, переменная формируется раньше.

laimas 23.08.2019 19:13

MC-XOBAHCK, попробуйте MutationObserver - следить за изменением класса, затем выполнять confirm.

MC-XOBAHCK 23.08.2019 19:33

laimas, спасибо вам за идею! Точно, мутатор должен решить эту задачу.

рони 23.08.2019 19:43

Цитата:

Сообщение от MC-XOBAHCK
Как это обойти? сеттаймаут ставить для конфирма

:yes:

рони 23.08.2019 20:54

MC-XOBAHCK,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .comment-delete{
      background-color: #FF00FF;
  }

  </style>


</head>

<body>
<div id="comment">comment</div>
<script>
comment.classList.add('comment-delete');
async function wait() {
  await new Promise(resolve => setTimeout(resolve, 100));
  return confirm("Удалить комментарий?");
}
function f() {
  wait().then(result => alert(result));
}

f();

  </script>
</body>
</html>


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