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" 的 span 对象中打印值,但它不是...中的键/值对有什么问题language_it.js吗?请帮帮我。

4

2 回答 2

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'];

这两行是等价的。如果这对您来说是新闻,那么我建议您开始阅读适当的 Javascript 教程。javascript 标记的信息页面是一个很好的起点。

于 2012-05-24T12:27:45.913 回答
2

该脚本将异步加载,因此当您尝试访问它时obj它还不可用。尝试使用类似的东西require.js或负载处理程序:

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

是否有任何特定原因要在事件处理程序中异步加载脚本文件?将它包含在加载中并在需要时立即访问似乎更有效。

于 2012-05-24T12:05:45.680 回答