Очередность выполнения функции и кода?

Привет, хабр.

Есть простая функция, которая добавляет элемент в DOM, например такая:

function add_to_DOM() {<br>
    $('body').append('<div id="asd"></div>');<br>
}<br>




Т.к. время изменения в структуре DOM-а зависит от процессора и от браузера, эмулируем это так:

function add_to_DOM() {<br>
    setTimeout(function(){<br>
        $('body').append('<div id="asd"></div>');<br>
    }, 500);<br>
}<br>




Теперь сам вопрос. Как заставить alert, выполняться только после полной отработки функции, без обертки его в setTimeout?

$('button').click(function(){<br>
    add_to_DOM();<br>
    alert($('#asd').attr('id'));<br>
});<br>




Можно ли как-то использовать jQuery.queue для кастомных функций?

Заранее благодарен.
  • Вопрос задан
  • 5507 просмотров
Решения вопроса 1
Вставка элементов в DOM работает синхронно, ваш алерт всегда будет выполняться только после того, как элемент вставлен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dpigo
@dpigo
Front-end developer
Ну, то что вам приходилось по какой-то причине лепить костыли еще не значит, что манипуляции с DOM происходят асинхронно, FYI:
stackoverflow.com/a/2035662
stackoverflow.com/a/7678000
stackoverflow.com/a/5085535
Ответ написан
vermilion1
@vermilion1
function add_to_DOM() {
	setTimeout(function(){
		$('body').append('<div id="asd">dasdasdasdsad</div>').trigger('asd_added');
	}, 500);
}
$('button').click(function(){
	add_to_DOM();
	$('body').on('asd_added', function() {
		alert($('#asd').attr('id'));
	})
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы