1

以下はindex.htmlファイルです。

<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>

そして、私は以下を持っていますlanguage_it.js:

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

ドロップダウンからイタリア語を選択するとkey1、スパン オブジェクトに id="p1" の値が出力されるはずですが、そうではありません... のキーと値のペアに何か問題がありますlanguage_it.jsか? 私を助けてください。

4

2 に答える 2

2

スクリプトは非同期で読み込まれるため、アクセスしようとしてobjもまだ利用できません。require.jsまたはロード ハンドラのようなものを使用してみてください。

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

イベント ハンドラでスクリプト ファイルを非同期にロードする特定の理由はありますか? オンロードに含めて、必要なときにすぐにアクセスできるようにする方が効率的です。

于 2012-05-24T12:05:45.680 に答える
2

文字列リテラルを引用しなかったため、投稿した Javascript ファイルは違法です。次のようになります。

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

アップデート

また、ライン

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

変数ではないため、間違ってkey1います(エラーメッセージにあるように)。

次のバリエーションのいずれかのように読む必要があります。

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

これらの 2 つの行は同等です。これがニュースである場合は、適切な Javascript チュートリアルを読み始めることをお勧めします。JavaScript タグの情報ページは出発点として適しています。

于 2012-05-24T12:27:45.913 に答える