【问题标题】:dynamically change javascript source with onclick event使用 onclick 事件动态更改 javascript 源
【发布时间】:2015-06-25 10:36:44
【问题描述】:

我是 JavaScript 初学者,遇到以下问题, 我有 2 种语言的多个页面。以后可能会更多。我使用 javascript var 来设置语言。要么:

Var language=”de”; or var language=”en”;

然后我用它来加载正确的语言文件:

<script src="javascript"+language+".js" type="text/javascript"></script>

有没有办法通过 onclick() 事件更改此变量。所以它会改变并保持改变,直到我再次改变它?

感谢您的宝贵时间。

【问题讨论】:

  • 现在肯定不行吗?
  • 如果我手动更改变量,它会起作用。但我想要一个 onclick 事件来更改它并加载另一个包含所有文本的 .js 文件。德语或英语。
  • 所以你有两个相同的 JavaScript 文件,只是语言不同?假设你有 10 种语言,你在某个地方发现了一个 bug,所以你必须修改 10 个 JS 脚本。
  • 是的 :) 现在我只需要这样做。这将是一个网络应用程序。而且我不想要针对不同语言的不同应用程序。

标签: javascript onclick var


【解决方案1】:

您可以像这样动态添加脚本:

var selectorEls = document.querySelectorAll(".language-select");
var current;

function _handleClick ( ev ) {
  
  if ( current ) current.parentNode.removeChild(current)

  var language = ev.target.getAttribute("data-language");
  var newScript = document.createElement("script");
  var newSrc = "javascript" + language + ".js";
  newScript.setAttribute("src",newSrc);
  current = newScript;
  document.head.appendChild(newScript);
}

for ( var i = 0; i < selectorEls.length; i += 1 ) {
  
  selectorEls[i].addEventListener("click", _handleClick);
}
<a class="language-select" data-language="en">EN</a>
<a class="language-select" data-language="fr">FR</a>
<a class="language-select" data-language="de">DE</a>

此代码绑定了对多个 &lt;a&gt; 元素的点击,每个元素都有一个语言数据属性。单击一个会使用正确的语言创建一个新的&lt;script&gt; 并将其添加到页面中。它还会删除您之前以这种方式添加的所有脚本,以确保不会发生冲突。

【讨论】:

  • 我认为它可能有效。但现在它什么也没做:)
  • 我在链接标签中添加了一个 href="#"
  • 它似乎重新加载了。但我认为它会在刷新后加载旧变量
  • @RonnyHabets 是的。如果您希望数据持续刷新页面,那么您还需要保存一个 cookie。见stackoverflow.com/questions/14573223/…
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 2016-05-06
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2011-01-16
相关资源
最近更新 更多