При выполнении функции js
function foo(){
var a;
$('p.message').html('Привет!');
a ='true';
if(a=='true') {
$('p.message').html('Пока!');
}
}
Появляется первое сообщение и остается, не меняется. Как сделать, чтобы сначала появилось 'Привет', а затем 'Пока' ?
Вы хотели получить такой эффект?
function foo(){
$('p.message').html('Привет!');
setTimeout(function(){
$('p.message').html('Пока!');
}, 1000)
}
foo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class='message'></p>
В примере ниже примется во внимание только последняя строчка кода: box.style.display = "block"; Это произойдет потому, что в начале выполняется основной поток (весь твой js), а когда полностью весь он выполниться, то тогда наступает очередь рендеринга - обновление картинки до состояния актуальной. В него входить вычисление Style Calculation, Layout, Paint еще входит Request Animation Frame, и он вроде первый идет по списку, но это другая история. Так вот в момент подготовки кадра уже учитываеться конечный результат, по этому в твоем примере в силу вступает $('p.message').html('Пока!');.
function style() {
box.style.display = "none";
box.style.display = "block";
box.style.display = "none";
box.style.display = "block";
box.style.display = "none";
box.style.display = "block";
box.style.display = "none";
box.style.display = "block";
}
style();
Можно сделать с помощью setTimeout.
let a = true;
function foo() {
if (a) {
$('p.message').html('Привет!');
a = false;
setTimeout(foo, 2000);
} else {
$('p.message').html('Пока!')
}
}
foo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class="message"></p>
Если хотите лучше понять почему так происходит, то можете посмотреть хорошее видео про Event Loop.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости