2015-10-27 1 views
0

J'essaye d'écrire une boucle pour améliorer la façon dont j'affecte des valeurs aux éléments html sur une page Web.document.getElementById (element) .innerText = variable

au moment où je l'utilise ....

document.getElementById("Season201516Score1").innerHTML = Game201516Score1; 
document.getElementById("Season201516Score2").innerHTML = Game201516Score2; 
document.getElementById("Season201516Score3").innerHTML = Game201516Score3; 

et ainsi de suite ....

Les variables sont

var Game201516Score1= "L 0-2" 
var Game201516Score2= "W 1-0" 
var Game201516Score3= "D 2-2" 

La boucle j'utilise est

for (var i = 1; i <= 3; ++i) 
{ 
element = 'Season201516Score' + i 
Score = ('Game201516Score' + i) 
document.getElementById(element).innerText = Score; 
} 

Cela fonctionne dans la mesure où il met texte dans les éléments corrects sur la page mais plutôt que les valeurs "L 0-2", "W 1-0" ou "D 2-2" il donne le texte "Game201516Score1", "Game201516Score2" et "Game201516Score3". Est-ce que quelqu'un peut me montrer ce que je fais mal.?

Répondre

0
Score = ('Game201516Score' + i) 

est une chaîne et non une variable. Donc vous assignez cette chaîne et non la variable au HTML. Vous devez convertir la chaîne en variable pour pouvoir l'utiliser en premier. Si c'est une variable globale alors window[Score] devrait vous donner la bonne réponse au lieu de seulement utiliser Score. Sinon, vous pouvez également utiliser this[Score].

+0

pour (var i = 6; i <= 7; ++ i) Merci, pensé que c'était quelque chose de simple! { element = 'Season201516Score' + i Score = ('Game201516Score' + i) document.getElementById (élément) .innerText = fenêtre [pointage]; } – GazzaLDN

+0

@ GazzaLDN oui, cela devrait résoudre le problème que vous avez, bien que ce soit encore une mauvaise pratique, utiliser des tableaux comme suggéré par Shreyas ou faire un objet –

+0

Merci ,, fenêtre [Score] fonctionne un régal. document.getElementById (élément) .innerText = fenêtre [Score]; } – GazzaLDN

1

Pouvez-vous stocker les scores dans un tableau? Quelque chose comme ça -

var Game201516Score = []; 
Game201516Score[0]= "L 0-2" 
Game201516Score[1]= "W 1-0" 
Game201516Score[2]= "D 2-2" 

for (var i = 0; i < 3; i++) 
{ 
    element = 'Season201516Score' + i 
    document.getElementById(element).innerText = Game201516Score[i]; 
} 
+0

Merci Shreyas, je suis d'accord tableaux sont la bonne façon de le faire, mais était après une solution rapide et la conversion de la chaîne à va fiable fonctionne bien pour mon problème actuel. – GazzaLDN

0

eval: Remplacez la ligne Score = ('Game201516Score' + i); par Score = eval('Game201516Score' + i);.

fenêtre : Si eval n'est pas fonctionne pour vous, essayez alors ce pour la ligne ci-dessus Score = window["Game201516Score" + i];;

J'espère que ça ira!

+0

Ack, 'eval' - sur la pire solution que vous pourriez suggérer! – Jamiec

+0

eval doit être évitée si possible –

+0

Pouvez-vous expliquer pourquoi 'eval' devrait être évité au-dessus de l'extrait de code? – deepakb

0

La première chose que vous devez faire est de mettre vos variables quelque part explicite - à l'aide var il est dans la portée actuelle, ce qui est tout à fait peut-être window mais cela pourrait dépendre (par exemple, si ce code est en fait dans une fonction)

window.myScores.Game201516Score1= "L 0-2" 
window.myScores.Game201516Score2= "W 1-0" 
window.myScores.Game201516Score3= "D 2-2" 

Puis l'autre bout de code utiliserait notation support carré pour accéder à ces variables

for (var i = 1; i <= 3; ++i) 
{ 
    element = 'Season201516Score' + i 
    Score = window.myScores['Game201516Score' + i]; 
    document.getElementById(element).innerText = Score; 
}