2010-04-28 74 views
4

Ce que je veux faire c'est: une page web avec un contenu continuellement mis à jour. (Dans mon cas est mise à jour toutes les 2s) Nouveau contenu est ajouté à l'ancien au lieu d'écraser.Ajouter à une page Web en javascript

Voici le code que j'ai:

var msg_list = new Array(
    "<message>Hello, Clare</message>", "<message>Hello,Lily</message>", 
    "<message>Hello, Kevin</message>", "<message>Hello, Bill</message>" 
); 
var number = 0; 
function send_msg() 
{ 
document.write(number + " " + msg_list[number%4]+'<br/>'); 
number = number + 1; 
} 
var my_interval = setInterval('send_msg()', 2000); 

Cependant, dans les deux IE et Firefox, une seule ligne est imprimé, et la page ne sera pas mis à jour plus. Fait intéressant dans Chrome, les lignes sont imprimées en continu, ce que je recherche.

Je sais que document.write() est appelé lorsque la page est chargée selon this link. Donc, ce n'est certainement pas la façon de mettre à jour la page Web en continu. Quel sera le meilleur moyen de réaliser ce que je veux faire?

Totalement novice en Javascript. Je vous remercie.

Lily

Répondre

1

Vous pouvez ajouter à la innerHTML propriété:

var number = 0; 
function send_msg() 
{ 
    document.getElementById('console').innerHTML += (number + " " + msg_list[number%4]+'<br/>'); 
    number = number + 1; 
} 

Ce code ajoute le message à un élément avec un id de console, comme

<div id="console"></div> 

Par ailleurs, il est mauvais Entraînez-vous à appeler setInterval avec une chaîne.

Au lieu de cela, passer la fonction elle-même, comme ceci:

var my_interval = setInterval(send_msg, 2000); 
+1

Extra '()' dans l'intervalle appelle là :) –

+0

Correction; merci .. – SLaks

+0

Notez également que 'new Array ('a', 'b', 'c')' est en quelque sorte la façon n00b de définir des tableaux - 'var msg_list = ['a', 'b', 'c']; 'est beaucoup plus propre. :-) –

1

Je commencerais en regardant la bibliothèque jQuery. Cela vous épargnera beaucoup de douleur.

Ce que vous voulez faire est de garder les lignes insérées dans une table, en utilisant par exemple:

$('table tbody').append('<tr><td>some value</td></tr>'); 
+1

Il a mentionné qu'il s'agit d'un noob total en javascript. Mieux pour lui de l'apprendre en utilisant juste nilla javascript et ensuite apprendre à le faire dans jQuery. – Bob

+1

Je ne suis pas d'accord. Pourquoi passer par toute cette douleur si vous n'avez pas à le faire. C'est comme dire apprendre l'assembleur avant d'apprendre c. –

+0

Je ne suis pas d'accord. C'est comme dire apprendre l'assembleur avant d'apprendre Java. – Daniel

1

j'aurais un div ou un autre récipient, comme ceci:

<div id="msgDiv"></div> 

ensuite écrire comme en utilisant .innerHTML, comme ceci:

var msg_list = new Array(
    "<message>Hello, Clare</message>", "<message>Hello,Lily</message>", 
    "<message>Hello, Kevin</message>", "<message>Hello, Bill</message>" 
); 
var number = 0; 
function send_msg() 
{ 
    document.getElementById("msgDiv").innerHTML += number + " " + msg_list[number%4]+'<br/>'; 
    number++; 
} 
var my_interval = setInterval(send_msg, 2000); 

You can see a working example of this here

+0

@Nick, j'ai pensé à votre solution avant, mais la chose est seulement une ligne sera affichée, et une nouvelle sera en train d'écraser l'ancienne. Qu'est-ce que je veux faire est d'imprimer toutes les lignes disponibles ~ – Lily

+1

@Lily - Ce n'est pas le cas ... essayez l'exemple, vous utilisez '+ =' au lieu de simplement '=' et il ajoute. –

+0

vous avez raison! J'ai raté le + lorsque j'ai regardé votre solution pour la première fois. Désolé pour ma négligence! ;-) – Lily

1

Ce serait une excellente occasion pour vous d'apprendre un peu de programmation DOM. L'utilisation du DOM pour mettre à jour la page devrait entraîner moins de frais généraux que la simple concaténation de plus de HTML dans le DOM. Recherchez le noeud dans lequel vous souhaitez placer les mises à jour et effectuez appendChild à chaque ajout ultérieur.