Comment mettre à jour régulièrement le temps?

function timeClock() { setTimeout("timeClock()", 1000); now = new Date(); alert(now); f_date = now.getDate()+" "+strMonth(now.getMonth())+" "+now.getFullYear()+" / "+timeFormat(now.getHours(), now.getMinutes()); return f_date; } <span class="foo"><script type="text/javascript">document.write(timeClock());</script></span> 

Alerte (maintenant); Me donne la valeur chaque seconde, mais il n'est pas mis à jour dans le html. Comment puis-je mettre à jour l'heure sur le html sans actualiser la page?

Il y a plusieurs erreurs dans votre code. Sans l'utilisation de var face de vos déclarations variables, vous les fuyez dans la portée globale.

En outre, l'utilisation de document.write est découragée .

Voici comment je le ferais:

JavaScript:

 function updateClock() { var now = new Date(), // current date months = ['January', 'February', '...']; // you get the idea time = now.getHours() + ':' + now.getMinutes(), // again, you get the idea // a cleaner way than string concatenation date = [now.getDate(), months[now.getMonth()], now.getFullYear()].join(' '); // set the content of the element with the ID time to the formatted string document.getElementById('time').innerHTML = [date, time].join(' / '); // call this function again in 1000ms setTimeout(updateClock, 1000); } updateClock(); // initial call 

HTML:

 <div id="time"> </div> 

SetInterval (expression, timeout);

La fonction setTimeout est destinée à un délai d'expiration unique, donc l'utilisation de setInterval serait une option plus appropriée. SetInterval fonctionnera régulièrement sans les lignes supplémentaires que la réponse d'Ivo a.

Je réécrirais la réponse d'Ivo comme suit:

JavaScript:

 function updateClock() { // Ivo's content to create the date. document.getElementById('time').innerHTML = [date, time].join(' / ') } setInterval(updateClock, 1000); 

Essayez-le vous-même! https://jsfiddle.net/avotre/rtuna4x7/2/

 x = document.getElementsByTagName('SPAN').item(0); x.innerHTML = f_date; 

Essayez de mettre ce bloc de code au lieu de déclaration de return , je ne l'ai pas testé, mais cela fonctionnera probablement

Il peut y avoir quelque chose dans le plugin jpg de Timeago sur lequel vous pouvez vous connecter, mais je n'ai pas vraiment essayé …

http://timeago.yarp.com/

 $('span.foo').html(f_date); 

Placez-le dans votre fonction timeclock()

Non testé

  function timeClock() { setTimeout("timeClock()", 1000); now = new Date(); alert(now); f_date = now.getDate()+" "+strMonth(now.getMonth())+" "+now.getFullYear()+" / "+timeFormat(now.getHours(), now.getMinutes()); $('span.foo').html(f_date); } 

J'utiliserais setInterval plutôt que setTimeout:

https://developer.mozilla.org/fr/DOM/window.setInterval

Je pense que votre fonction setTmeout a les mauvaises variables, la première devrait être une fonction qui n'est pas une chaîne, ce qui m'a confondu un peu. Fondamentalement, vous devez écrire sur l'étiquette d'extension lorsque vous exécutez la fonction.

J'ai créé une version jQuery dans un violon pour démontrer ce que je veux dire. N'a pas eu votre fonction strMonth, mais vous avez l'idée. J'ai également modifié l'alerte sur console.log mais vous pouvez supprimer cette ligne.

http://jsfiddle.net/5JWEV/

 function timeClock() { setTimeout("timeClock()", 1000); now = new Date(); alert(now); f_date = now.getDate()+" "+strMonth(now.getMonth())+" "+now.getFullYear()+" / "+timeFormat(now.getHours(), now.getMinutes()); document.getElementById("foo").innerHTML = f_date; } <span id="foo"></span>