Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Элементы добавленные в onload - пропадают (https://javascript.ru/forum/events/26599-ehlementy-dobavlennye-v-onload-propadayut.html)

yog-hcgm 14.03.2012 15:24

Элементы добавленные в onload - пропадают
 
Здравствуйте!
Есть такой код. В событии onload динамически добавляется iframe, а в него img. В Internet Explorer - работает и показывает. В FireFox и Chrome изображение сначала рисуется, затем мгновенно исчезает, будто срабатывает еще одно событие которое перерендеривает DOM.
Если же вызвать не напрямую, а через setTimeout - то работает и в Firefox и Chrome. Не знает ли кто, что происходит?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body onload='LoadImgs();'>
</body>
<script type="text/javascript">
    CreateIframe = function (frameName, frWidth, frHeight, zindex) {        
        var frameObj = document.createElement('iframe');
        frameObj.width = frWidth;
        frameObj.src = 'Content.htm';
        frameObj.height = frHeight;
        frameObj.id = frameName;
        frameObj.name = frameName;
        frameObj.frameBorder = 0;
        frameObj.allowTransparency = 'allowtransparency';
        //frameObj.allowtransparency = 'true';
        frameObj.style.zIndex = zindex;
        frameObj.style.position = 'absolute';
        frameObj.style.scrolling = 'no';
        frameObj.style.left = 0;
        frameObj.style.top = 0;
        AppendChild(window, frameObj);
        return frames[frames.length - 1];
    }
    AppendChild = function (ob, child) {
        if (ob.document.body == null)
            ob.document.appendChild(child);
        else
            ob.document.body.appendChild(child);
    }
    PX = function (ob) {
        return parseInt(ob) + 'px';
    }

    function LoadImgs() {
        var MapFrame = CreateIframe('idMapFrame', 200, 200, 1);      

        //setTimeout(function () {
                            Tmp(MapFrame);
        //               },1000);        
    }

    function Tmp(MapFrame) {
        var img = MapFrame.document.createElement('img');
        img.src = 'imgs/util/redcrest.png';
        img.style.position = 'absolute';
        img.style.left = PX(90);
        img.style.top = PX(90);
        AppendChild(MapFrame, img);
    }
</script>
</html>

Раед 14.03.2012 16:17

Цитата:

Сообщение от yog-hcgm
MapFrame.document

такого вроде бы нет, у фреймов есть либо contentWindow, либо contentDocument (в зависимости от браузера).

yog-hcgm 15.03.2012 12:40

Цитата:

Сообщение от Раед (Сообщение 163124)
такого вроде бы нет, у фреймов есть либо contentWindow, либо contentDocument (в зависимости от браузера).

Смысл в том, что всё везде работает. Только в Файрфоксе и Хроме имаджи появляются, но спустя полсекунды пропадают. А если их добавлять через setTimeout через секунду, то всё совсем хорошо.

Только хотелось бы понять в чём дело и что за событие иха удаляет из DOM`а

grego 17.03.2012 20:11

Добрый день!

Уточню в данной теме, дабы не создавать новые сущности.
Пишу внешнюю валидацию на js, собственно при загрузке документа необходимо поля, в которые установлен фокус, подсвечивать другим цветом - соотв-но при переводе фокуса делать по дефолту.
Задача банальна, но вопрос - если я реализую валидацию в рамках функции, которая вешается на onload страницы, как и что мне в данном случае указывать в условии?
if (document.getElementById("book").onfocus==false)
?
Подскажите, пожалуйста.
Заранее благодарю.


Часовой пояс GMT +3, время: 06:10.