2012-05-24 7 views
1

Voici fichier index.html:Impossible de charger paire clé/valeur dans le fichier HTML à partir du fichier JS externe

<html> 

<head> 

<script> 

function ChangePageLanguage() 
{ 
var e = document.getElementById("langDD"); 
var lang = e.options[e.selectedIndex].value; 

if (lang == "it") 
{ 
    var scrptE = document.createElement("script"); 
    scrptE.setAttribute("type", "text/javascript"); 
    scrptE.setAttribute("language", "JavaScript"); 
    scrptE.setAttribute("src", "language_it.js?" + (Date.now() % 10000)); 
    var head = document.getElementsByTagName("head")[0]; 
    head.appendChild(scrptE); 

    document.getElementById('p1').innerHTML = obj[key1]; 
    //document.getElementById('p2').innerHTML = obj[key2]; 
} 
} 
</script> 
</head> 

<body> 
<select onchange="ChangePageLanguage()" id="langDD"> 
    <option value="en">English</option> 
    <option value="it">Italian</option> 
</select> 
<br/> 
<span id="p1"> 
</span> 
<br/> 
<span id="p2"> 
</span> 

</body> 

</html> 

Et j'ai suivant language_it.js:

var obj = { 
key1: Il mio nome è Azeem, 
key2: Sono uno sviluppatore di Software 
}; 

Lorsque je sélectionne la langue italienne de Dropdown , il devrait imprimer la valeur key1 dans l'objet span avec id = "p1", mais ce n'est pas ... Y at-il quelque chose de mal avec les paires clé/valeur dans language_it.js? S'il vous plaît aidez-moi.

Répondre

2

Le script va charger async, donc quand vous essayez d'accéder obj il n'est pas encore disponible. Essayez d'utiliser quelque chose comme require.js ou un gestionnaire de charge:

scrptE.onload = scrptE.onreadystatechange = function() { 
    console.log(obj); 
}; 

Y at-il une raison particulière pour laquelle vous voulez charger le fichier de script Async un gestionnaire d'événements? Semble plus efficace pour l'inclure et avoir un accès instantané en cas de besoin.

+0

J'ai ajouté ce gestionnaire après 'head.appendChild (scrptE);' mais rien ne s'est passé !!! – Azeem

+0

Essayez de l'ajouter avant l'ajout. En outre, essayez de placer l'objet 'obj' dans l'étendue de la fenêtre pour une meilleure fermeture. – David

+0

Ne fonctionnait pas non plus ... La console web de firefox présentait des exceptions 'key1 n'est pas défini' et' missing} après la liste de propriétés'. – Azeem

2

Le fichier Javascript que vous avez posté est illégal, puisque vous n'avez pas cité les littéraux de chaîne. Il devrait ressembler à ceci:

var obj = { 
    key1: 'Il mio nome è Azeem', 
    key2: 'Sono uno sviluppatore di Software' 
}; 

Mise à jour

En outre, la ligne

document.getElementById('p1').innerHTML = obj[key1]; 

est faux, puisque key1 n'est pas une variable (comme le message d'erreur indique).

Il faut lire comme une des variantes suivantes:

document.getElementById('p1').innerHTML = obj.key1; 
document.getElementById('p1').innerHTML = obj['key1']; 

Ces deux lignes sont équivalentes. Si c'est une nouvelle pour vous, alors je vous suggère de commencer à lire un bon tutoriel Javascript. Le javascript tag's info page est un bon point de départ.

+0

Après la mise à jour du fichier JS j'ai eu une seule exception: 'key1 n'est pas défini'! – Azeem

+0

@NidaSulheri: voir ma réponse mise à jour – Martijn

+0

J'ai mis à jour en tant que 'document.getElementById ('p1'). InnerHTML = obj.key1;'. Maintenant, il a montré que «obj n'est pas défini». J'apprécie vraiment votre aide. – Azeem

Questions connexes