2016-11-22 3 views
0

Следующий код в:JavaScript setinterval не работает

<script type="text/javascript"> 

function a() { 
    document.write("bob "); 
} 

setInterval("a()", 1000); 

</script> 

это должно иметь из положить 1 bob, printed в браузере, every second.

Я использую firefox, и он только печатает onces, и ничего .... У кого-нибудь есть идеи, почему? mauybe Мне что-то не хватает? ec = now.getSeconds(); document.write (часы + ':' + мин + ':' + sec + "
"); }

UPDATE EDIT: 

У меня такая же проблема с этим кодом:

<script type="text/javascript"> 
function printtime() { 
    var now = new Date(); 
    var hours = now.getHours(); 
    var mins = now.getMinutes(); 
    var sec = now.getSeconds(); 
    document.write(hours+':'+mins+':'+sec+"<br />"); 
} 

setInterval("printtime()", 1000); 
</script> 

Это должно напечатать время на браузер под предыдущим, один раз в секунду .... но это обыкновение печать дальше, чем первый ..

+1

Удалите кавычки из вызова функции в setInterval, просто установите setInterval (a, 1000); – leofontes

+0

@leofontes Я не думаю, что удаление котировок на * "a()" * приведет к лучшему. –

+2

[Отлично работает для меня.] (Http://codepen.io/anon/pen/xRdOeB) Хотя я бы [предостерег от 'document.write'] (http://stackoverflow.com/questions/802854/why- is-document-write -emed-a-bad-practice) и предлагают просто сделать 'setInterval (a, 1000)' вместо того, чтобы полагаться на свойства 'eval'' setInterval'. –

ответ

6

Используя document.write после того, как основной синтаксический анализ HTML полностью исчерпал всю страницу и заменил ее на то, что вы выводите. В Firefox это уничтожает ваш таймер, поэтому он останавливается после стрельбы только один раз и вытирает страницу. (Это не относится к Chrome, который поддерживает функцию a вокруг, так your original code работает на Chrome, но не Firefox.)

Если вы только выход, скажем, новые элементы на страницу, то, что у вас есть работа:

function a() { 
 
    var p = document.createElement("p"); 
 
    p.appendChild(
 
    document.createTextNode("bob") 
 
); 
 
    document.body.appendChild(p); 
 
} 
 

 
setInterval("a()", 1000);

но, то лучше не использовать строки с setInterval или setTimeout; просто обратитесь к функции вместо:

setInterval(a, 1000); 

function a() { 
 
    var p = document.createElement("p"); 
 
    p.appendChild(
 
    document.createTextNode("bob") 
 
); 
 
    document.body.appendChild(p); 
 
} 
 

 
setInterval(a, 1000);

Или, если вы хотите просто добавить текст в конец существующего элемента многократно:

function a() { 
 
    var p = document.getElementById("target"); 
 
    p.appendChild(
 
    document.createTextNode("bob ") 
 
); 
 
} 
 

 
setInterval(a, 1000);
<p id="target"></p>

+1

Это не проблема, но стоит отметить. – Feathercrown

+1

'document.write()' не заменяет вывод других 'document.write()', если вы не используете 'document.close()'. – Feathercrown

+0

@ T.J.Crowder [Потому что их код работает нормально] (http://codepen.io/anon/pen/xRdOeB) в текущем состоянии, если только, как указал Feathercrown, документ закрыт. –

2

function a() { 
 
    console.log("bob "); 
 
} 
 

 
setInterval(a, 1000);
*{ background-color: yellow; }

+0

Хотя это всегда хорошая идея, она не соответствует симптому, описанному в вопросе. Если это проблема с областью, 'a' не запускается ни разу. –

1

Здесь вы идете; не добавляйте кавычки или скобки после вашей функции в setInterval();.

<script type="text/javascript"> 
 

 
function a() { 
 
    document.write("bob "); 
 
} 
 

 
setInterval(a, 1000); 
 

 
</script>

Также стоит отметить document.write(); будет удалить загруженный веб-страницы, включая вашу.

+0

Огромно неправильно, это так. Поскольку добавление новых значений не будет видно пользователям. Я думаю, что я что-то упускаю. Неважно. Позвольте мне вернуться –

+0

@RajaprabhuAravindasamy Вы запустили фрагмент? Этот код работает нормально (по крайней мере, в Chrome, я еще не тестировал других). –

+0

Yup My bad. Я думал, что document.write заменит все. Я не прав. Позвольте мне полностью прочитать этот документ. –