Ir ao conteúdo

Javascript duas repeticionais dentro de uma condicional


Ir à solução Resolvido por GabrielSennaMs,

Posts recomendados

Postado

boa tarde pessoal. estou tentando fazer um script que vai mudar os textos do site de acordo com o idioma escolhido. ele é bom simples, o código é esse:

const 
    itemsToChoice = document.querySelectorAll(".choice"),
    itemsPortuguese = document.getElementsByClassName("get_pt"),
    itemsEnglish = document.getElementsByClassName("get_en")

    console.log(itemsToChoice)
    console.log(itemsPortuguese)
    console.log(itemsEnglish)

function selectedItem(event) {
    const language = event.target.id
    if (language == "english") {
        for (let i = 0; i <= itemsEnglish.length; i++) {
            itemsEnglish[i].style.display="block"
        }
        for (let x = 0; x <= itemsPortuguese.length; x++) {
            itemsPortuguese[x].style.display="none"
        }
    } else {
        for (let i = 0; i <= itemsEnglish.length; i++) {
            itemsEnglish[i].style.display="none"
        }
        for (let x = 0; x <= itemsPortuguese.length; x++) {
            itemsPortuguese[x].style.display="block"
        }
    }
}


for (const item of itemsToChoice) {
    console.log(1)
    item.addEventListener("click", selectedItem)
}

o maior problema está nessa condicional, onde coloquei dois "for". apenas o primeiro é executado, e o segundo esquecido:

if (language == "english") {
        for (let i = 0; i <= itemsEnglish.length; i++) {
            itemsEnglish[i].style.display="block"
        }
        for (let x = 0; x <= itemsPortuguese.length; x++) {
            itemsPortuguese[x].style.display="none"
        }
    } else {
        for (let i = 0; i <= itemsEnglish.length; i++) {
            itemsEnglish[i].style.display="none"
        }
        for (let x = 0; x <= itemsPortuguese.length; x++) {
            itemsPortuguese[x].style.display="block"
        }
    }

antes usava a variável i em ambas as repeticionais e acabei mudando achando que era esse o erro. vocês tem alguma solução para isso? Desde já agradeço muito pela atenção!

 

  • Solução
Postado

@Bulgarellllli O problema está na sua condição de loop nos for.

 

Você usa menor que e igual "<=", e com essa condição o loop é executado uma vez a mais que o valor do array com os elementos.

 

Colocando só menor que o loop vai funcionar.

if (language == "english")
{
  for (let i = 0; i < itemsEnglish.length; i++)
  {
    console.log(itemsEnglish[i]);
    itemsEnglish[i].style.display = "block";    
  }

  for (let x = 0; x < itemsPortuguese.length; x++)
  {
    itemsPortuguese[x].style.display = "none";
  }
}
else
{
  for (let i = 0; i < itemsEnglish.length; i++)
  {
    itemsEnglish[i].style.display = "none";
  }

  for (let x = 0; x < itemsPortuguese.length; x++)
  {
    itemsPortuguese[x].style.display = "block";
  }
 }

Dessa forma deve funcionar!

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!