Выполнение javascript, после загрузки необходимого объекта
Иногда возникает необходимость выполнить javascript сразу, после загрузки необходимого объекта. Дабы не подключать ради этой цели целый фреймворк, была написана следующая функция:
function init_OnLoad(id, e)
{
var obj = document.getElementById(id);
if(obj)
eval(e);
else
setTimeout(function(){init_OnLoad(id, e)}, 0);
}
Если мы на 100% не уверены, что данный объект будет существовать в документе, то в функцию нужно будет ввести дополнительные проверки, чтоб избежать бесконечного рекурсивного вызова:
var _documentReady = false;
window.onload = function()
{
_documentReady = true;
}
function init_OnLoad(id, e)
{
var obj = document.getElementById(id);
if(obj)
eval(e);
else
{
if(!_documentReady)
setTimeout(function(){init_OnLoad(id, e)}, 0);
else
{
obj = document.getElementById(id);
if(obj)
eval(e);
}
}
}
Пример:
Необходимо выполнить функцию abs с параметрами a,b,s – сразу после загрузки объекта с id = container.
init_OnLoad("container", "abs(a, b, s)");
А не слишком ли мало писать задержку в setTimeout 0мс?
Может имеет смысл 10мс хотябы написать. Пользователю без разницы, а движку и компу легче.
Конечно рестарт функции с задержкой через 0 мс – полнейший бред.
если уж на то пошло – зачем задержка (settimeout)? используйте прямой вызов функции.
но изначально идея была правильной – нужна задержка порядка 100 мс.