Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2019, 18:05
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

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

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

if (questionDelete) { ...


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

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

Как это обойти? сеттаймаут ставить для конфирма или есть какие другие решения?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2019, 18:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

MC-XOBAHCK,
строка 2
document.documentElement.clientWidth;
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2019, 18:33
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

рони, я извиняюсь, не понял вашего намёка.
Нужно вставить эту строку чтобы она оттянула выполнение confirm ?
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2019, 18:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

MC-XOBAHCK,
попробуйте и напишите результат.
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2019, 18:42
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

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

Единственное, у меня в оригинале добавляются три класса:
comment.classList.add('comment-delete', 'border', 'border-danger');
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2019, 18:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

MC-XOBAHCK,
увы, не работает, переменная формируется раньше.
Ответить с цитированием
  #7 (permalink)  
Старый 23.08.2019, 19:13
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

MC-XOBAHCK, попробуйте MutationObserver - следить за изменением класса, затем выполнять confirm.
Ответить с цитированием
  #8 (permalink)  
Старый 23.08.2019, 19:33
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

laimas, спасибо вам за идею! Точно, мутатор должен решить эту задачу.
Ответить с цитированием
  #9 (permalink)  
Старый 23.08.2019, 19:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от MC-XOBAHCK
Как это обойти? сеттаймаут ставить для конфирма
Ответить с цитированием
  #10 (permalink)  
Старый 23.08.2019, 20:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер срабатывает раньше времени или вообще не срабатывает Terebonko Элементы интерфейса 6 03.08.2017 12:43
alert срабатывает раньше Bird17 Events/DOM/Window 2 31.05.2017 19:47
confirm свое оформление ninzzo Общие вопросы Javascript 5 06.01.2015 14:41
fadeIn срабатывает раньше чем нужно. mitiya jQuery 5 12.09.2012 02:47
событие onload срабатывает раньше valent1224 Events/DOM/Window 16 28.02.2011 23:55