2016-09-19 2 views
1

У меня есть яваскрипт функции, которая делает две вещи:Javascript подтверждения предотвращает обновление экрана в Chrome

  • Изменение в таблицах строка цвета фона
  • Выдает подтверждения() всплывающее окно с просьбой пользователя подтвердить удаление из (подсвечивается) строка

В Firefox отлично работает. В Chrome появляется всплывающее окно. Но фон не меняет цвет, пока ПОСЛЕ того, как я отклоню окно confirm(), которое вызывает поражение цели, позволяя пользователю узнать, какая строка должна быть удалена.

Я уверен, что это связано с асинхронным характером javascript. Но мне нужно знать, как обойти это. Прямо сейчас, две строки кода:

$(icon).closest("tr").css("background-color", "yellow"); 
    if (confirm(message)) {.......} 

Что мне нужно сделать, чтобы убедиться, что строка желтого цвета, когда отображается всплывающее окно, и не ждать, чтобы изменить к желтому, пока после того, как всплывающее окно уходит ? Я могу попробовать задержки и т. Д. Но это хватит на соломинку. Есть ли «правильный» способ справиться с этим?

Опять же, отлично работает на Firefox .... nada на Chrome. Не пробовали другие браузеры.

Спасибо. Jerry

ответ

0

Я могу попробовать задержки и т. Д. Но это захватывает соломинку.

Не совсем.

Это полностью зависит от браузера, когда нужно делать вещи. У каждого браузера есть свои собственные оптимизации. Единственный способ справиться с этим - небольшая задержка.

Одна надежная форма задержки - requestAnimationFrame(). Я думаю, вы можете быть достаточно уверены, что как только это уволится, браузер перекрасит что-либо ранее. Непроверенный, но попробуйте что-то вроде этого:

$(icon).closest('tr').css('background-color', 'yellow'); 
requestAnimationFrame(function() { 
    if (confirm(message)) { 

    } 
}); 

Также обратите внимание, что у вас нет никакого контроля над появлением этого окна подтверждения. Он может быть поверх вашего контента. Это зависит от браузера, чтобы решить, как это представить, будь то традиционное окно стиля инструмента или полноэкранный модальный.

+0

Спасибо за быстрый ответ. К сожалению, requestAnimationFrame не оказал никакого эффекта. Однако я заменил его на: SetTimout (function() { if (подтвердить (сообщение)) {...... } }, 100); и это сработало. Еще раз спасибо за то, что указал мне в правильном направлении. –

+0

@JerryMalcolm Попробуйте использовать 'requestAnimationFrame()' дважды. Я подозреваю, что он будет более надежным, чем нормальная задержка. – Brad

Смежные вопросы