Ir ao conteúdo
  • Cadastre-se
Bulgarellllli

Javascript RESOLVIDO duas repeticionais dentro de uma condicional

Posts recomendados

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!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@GabrielSennaMs mano, muito obrigado mesmo, tu me salvou. consegue me explicar porque a fato do "for", exeutar uma repetição a mais travava o resto da estrutura? muito obrigado novamente pela ajuda, tu é o cara!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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...

Aprenda a ler resistores e capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!