简单函数只工作一次(显示/隐藏div) - 香草JavaScript



>我正在开发一个多语言网站。

我希望能够按下一个按钮,并且所有(包装内容(div 的显示变得none,只有正确的一个变得inline-block

它有效。但只有一次。问题出在哪里?请不要使用JQuery。

编辑在 html 中添加了一些代码以使其"易于理解">

JS(所有函数toSl,toAn等都是相同的(。

function toRu () {
var lngs, i;
lngs = document.querySelectorAll(".lng");
for (var i=0;i<lngs.length;i++){
lngs[i].style.display="none";
}
document.getElementById("ru").style.display="inline-block";
}
document.getElementById("slo").addEventListener("click", toSl);
document.getElementById("ang").addEventListener("click", toAn);
document.getElementById("nem").addEventListener("click", toNe);
document.getElementById("ita").addEventListener("click", toIt);
document.getElementById("hrv").addEventListener("click", toHr);
document.getElementById("rus").addEventListener("click", toRu);

.HTML

<!DOCTYPE html>
<html>
<body>
<div class="lng" id="sl">
<nav>
<div id="lngSpace">
Language Selector
<input type="button" id="slo" class="zastave" value="Slo">
<input type="button" id="ang" class="zastave" value="Eng">
<input type="button" id="nem" class="zastave" value="Deu">
<input type="button" id="ita" class="zastave" value="Ita">
<input type="button" id="hrv" class="zastave" value="Hrv">
<input type="button" id="rus" class="zastave" value="Rus">
</div>
</nav>
Content of the page in Sl language
</div>
<div class="lng" id="en">
<nav>
<div id="lngSpace">
Language Selector
<input type="button" id="slo" class="zastave" value="Slo">
<input type="button" id="ang" class="zastave" value="Eng">
<input type="button" id="nem" class="zastave" value="Deu">
<input type="button" id="ita" class="zastave" value="Ita">
<input type="button" id="hrv" class="zastave" value="Hrv">
<input type="button" id="rus" class="zastave" value="Rus">
</div>
</nav>
Content of the page in En language
</div>
<div class="lng" id="de">
<nav>
<div id="lngSpace">
Language Selector
<input type="button" id="slo" class="zastave" value="Slo">
<input type="button" id="ang" class="zastave" value="Eng">
<input type="button" id="nem" class="zastave" value="Deu">
<input type="button" id="ita" class="zastave" value="Ita">
<input type="button" id="hrv" class="zastave" value="Hrv">
<input type="button" id="rus" class="zastave" value="Rus">
</div>
</nav>
Content of the page in Ger language
</div>
etc etc
</body>
</html>

编辑我的代码还包含这段在一开始就运行的JS。我不认为它会影响 JS 的其余部分,因为我试图只更改div 的显示而不重新加载页面......但只是我发布它以防万一(因为发布到 plnkr 的示例实际上有效......

var language = navigator.language || navigator.languages[0];
console.log(language);
var languageFistTwo = language.substr(0,2); // To only keep the first 2 characters.
console.log(languageFistTwo);
switch (languageFistTwo) {
case "sl":
document.getElementById("sl").style.display="inline-block";
break;  
case "en":
document.getElementById("en").style.display="inline-block";
break;
case "de":
document.getElementById("de").style.display="inline-block";
break;
case "it":
document.getElementById("it").style.display="inline-block";
break;
case "hr":
document.getElementById("hr").style.display="inline-block";
break;
case "ru":
document.getElementById("ru").style.display="inline-block";
break;
default:
document.getElementById("en").style.display="inline-block";
break;
}

示例:https://plnkr.co/edit/FWsUfBzRp1yuS4WKDTIw?p=info

这是一个编辑的示例,我假设您正在尝试做什么。如果要使用示例运行,则必须在按钮上使用class而不是id,并且click所有图像的侦听器,而不仅仅是第一组图像。

无论哪种方式,您都可以在一个函数中解决所有问题。您不需要每种语言的函数。

注释和解释在代码中。

//function toRu(){
function toAny(){
var lngs = document.querySelectorAll(".lng");
for (var i=0;i<lngs.length;i++){
//REM: The element with the matching id is inline-block, the others none
lngs[i].style.display = lngs[i].getAttribute('data-id') == this.value ? 'inline-block' : 'none'
}
}
//REM: This only assings the event to one button
/*
document.getElementById("slo").addEventListener("click", toAny);
document.getElementById("ang").addEventListener("click", toAny);
document.getElementById("nem").addEventListener("click", toAny);
document.getElementById("ita").addEventListener("click", toAny);
document.getElementById("hrv").addEventListener("click", toAny);
document.getElementById("rus").addEventListener("click", toAny);
*/
for(var tL=document.querySelectorAll('input.zastave'), i=0, j=tL.length; i<j; i++){
tL[i].addEventListener("click", toAny);
}
<!--
I do not know why you replicated the language selectors multiple times. For me this structure makes more sense.
-->
<nav>
<input type="button" id="slo" class="zastave" value="Slo">
<input type="button" id="ang" class="zastave" value="Eng">
<input type="button" id="nem" class="zastave" value="Deu">
<input type="button" id="ita" class="zastave" value="Ita">
<input type="button" id="hrv" class="zastave" value="Hrv">
<input type="button" id="rus" class="zastave" value="Rus">
</nav>
<!--
id should be unique. Therefore I changed it to data-id and made it match the values of the buttons. This allows us to easily toggle the right divs in one function
-->
<div class="lng" data-id="Slo">
Content of the page in Sl language
</div>
<div class="lng" data-id="Eng">
Content of the page in En language
</div>
<div class="lng" data-id="Deu">
Content of the page in Ger language
</div>

最新更新