setinterval не может запустить document.writeln - PullRequest
0 голосов
/ 10 марта 2011

Привет,

Приведенный ниже код работает для оповещения, но не для document.writeln.Это из-за события onload?Если это так, не должен ли браузер добавлять больше элементов после завершения загрузки?- Пытаюсь понять, как это работает (тем временем я изучаю jquery).

<body onload="timeMsg()">
<script type="text/javascript">
        function timeMsg()
        {
        var t=self.setInterval("randInt()",3000);
        }
        function randInt()
        { 
        document.writeln("<br />" +Math.floor(Math.random() * 7)); //doesn't work
        alert(Math.floor(Math.random() * 7));  //works

        }
    </script>
</body>

Ответы [ 4 ]

2 голосов
/ 10 марта 2011

Когда браузер завершит чтение полной HTML-страницы, «документ» закроется. Вызов document.write() (или его друзьям) после этой точки неявно откроет документ и сотрет все, что там есть.

Вместо этого вы можете использовать API манипулирования DOM для обновления страницы.

2 голосов
/ 10 марта 2011

Работает в Chrome.Возможно, вам следует следовать совету MDC :

Запись в документ, который уже загружен без вызова document.open(), автоматически выполнит вызов document.open.После того, как вы закончили писать, рекомендуется позвонить document.close(), чтобы сообщить браузеру завершить загрузку страницы.

Редактировать: Как указывает @Pointy (хорошее предложение;))это заменит все содержимое страницы.

И еще одна вещь: document.write недоступно в документах XHTML!

Вывод: Не использоватьit.

Вы можете добиться того же эффекта, например,

document.body.innerHTML += "<br />" + Math.floor(Math.random() * 7);

или

var div = document.createElement('div');
div.appendChild(document.createTextNode(Math.floor(Math.random() * 7)));

document.body.appendChild(div);
0 голосов
/ 10 марта 2011

Альтернатива

<body onload="timeMsg()">

<div id="outputDiv"></div>

<script type="text/javascript">
    function timeMsg()
    {
        var t = self.setInterval("randInt()", 3000);
    }

    function randInt()
    { 
        document.getElementById("outputDiv").innerHTML += "<br />" + Math.floor(Math.random() * 7);
        alert(Math.floor(Math.random() * 7));  //works
    }
</script>

0 голосов
/ 10 марта 2011

Вместо записи в документ вставьте элементы в DOM:

var el = document.body.appendChild(document.createElement("div"));
el.innerHTML = Math.floor(Math.random() * 7));
...