2016-07-20 5 views
-3

я первый сделал это:SetTimeout() и getElementById() не работают вместе

<script> 
    function result2() { 
     document.write("..."); 
    } 
    function result1() { 
     document.write(".."); 
     setTimeout(result2, 1000); 
    } 
    document.write("."); 
    setTimeout(result1, 1000); 
</script> 
<div id="body"></div> 

setTimeout() не работает на всех девяносто девять раз из ста, так что я был удивлен, увидев его работая, даже если он сбился с самого конца. Но это не сработало, как раньше хотели, чтобы я переписал сценарий только немного, чтобы быть что-то вроде этого:

<script> 
    function result2() { 
     document.getElementById("body").innerHTML = "..."; 
    } 
    function result1() { 
     document.getElementById("body").innerHTML = ".."; 
     setTimeout(result2, 1000); 
    } 
    document.getElementById("body").innerHTML = "."; 
    setTimeout(result1, 1000); 
</script> 
<div id="body"></div> 

Но ничего не происходило вообще, он просто дал мне пустую страницу. .. Итак, я попробовал setInterval(), но здесь снова это не сработало. Так что, пожалуйста, помогите мне, как я могу решить эту проблему?

+2

Каждый интервал создается другой интервал .... Вы не тайм-аут, как ваше название говорит, что вы делаете .... И вы не следует использовать document.write после загрузки страницы! – epascarello

+0

Также см. Http://stackoverflow.com/questions/9916747/why-is-document-body-null-in-my-javascript?noredirect11&lq=1 – gcampbell

+0

epascarello: я не знал, извините, я просто начинающий! – bexandre

ответ

2

Проблема в том, когда код выполняется, элементы не доступны в DOM. Вы можете использовать любой из ниже раствора

  1. Подведите <script> в конце <body так, когда код выполняется, элементы доступны в DOM
  2. Wrap код, доступ к элементам DOM в DOMContentLoaded событие обратного вызова

<script> 
 
    function result2() { 
 
     document.getElementById("body").innerHTML = "..."; 
 
    } 
 

 
    function result1() { 
 
     document.getElementById("body").innerHTML = ".."; 
 
     setInterval(result2, 1000); 
 
    } 
 

 
    document.addEventListener('DOMContentLoaded', function() { 
 
     document.getElementById("body").innerHTML = "."; 
 
     setInterval(result1, 1000); 
 
    }); 
 

 
</script> 
 
<div id="body"></div>

0

Добавить сумы т в конце тега тела, и он должен работать

function result2() { 
 
    document.getElementById("body").innerHTML = "..."; 
 
    } 
 

 
function result1() { 
 
    document.getElementById("body").innerHTML = ".."; 
 
     setInterval(result2, 1000); 
 
    } 
 

 
document.getElementById("body").innerHTML = "."; 
 
    setInterval(result1, 1000);
<div id="body"></div>

Смежные вопросы