Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

206
Visualizações
Agregar/eliminar estilo después de hacer clic en la etiqueta/problema de entrada [radio]

Tengo un problema con una función que selecciona elementos activos. Hay algunos campos de entrada/etiqueta con sectoins (una sección, un elemento activo/en el que se hizo clic). Solo funciona cuando hago doble clic. Si hago clic una vez, no hay resultado. Puedo configurar setTimeout para ese código y luego funciona, pero no siempre.

Ejemplo:

 var radios = document.querySelectorAll('#calculator input[type=radio]'); var label = document.querySelectorAll("#calculator label"); function active(e) { radios.forEach((el,index) => { if(el.checked === true) { console.log('true'); label[index].classList.add('active'); } else { console.log('false'); label[index].classList.remove('active'); } }) }

Ejemplo de campo html:

 <input id="p75" type="radio" name="geodesic_size" value="11250" > <label for="p75"> <input id="p30" type="radio" name="geodesic_size" value="5626" checked> <label for="p30">
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

No estoy seguro de si esto es lo que necesita, pero aquí hay un ejemplo de alternar la clase active cuando cambia la entrada marcada:

 const radios = document.querySelectorAll('input[type="radio"]'); const label = document.querySelectorAll("label"); function active(e) { radios.forEach((el,index) => { if(el.checked === true) { console.log('true'); label[index].classList.add('active'); } else { console.log('false'); label[index].classList.remove('active'); } }) } radios.forEach(el => { el.addEventListener('change', active); })
 .active { color: red; }
 <input id="p75" type="radio" name="geodesic_size" value="11250" > <label for="p75">First</label> <input id="p30" type="radio" name="geodesic_size" value="5626" checked> <label for="p30" class="active">Second</label>

about 4 years ago · Juan Pablo Isaza Relatório

0

Las otras respuestas parecen funcionar bien, solo agregaría un par de sugerencias:

En primer lugar, también puede acceder a las etiquetas asociadas a un elemento con HTMLInputElement.labels . En mi opinión, usar el.labels[0] sería un poco más sólido que confiar en que el índice del botón de opción y la etiqueta sean iguales.

Si todo lo que necesita hacer es alternar una clase active como esta, puede lograr lo mismo con CSS solo usando el combinador de hermanos adyacente (+) y deshacerse de todo el JavaScript:

 input:checked + label { color: red; }
 <div> <input id="p75" type="radio" name="geodesic_size" value="11250"> <label for="p75">p75</label> </div> <div> <input id="p30" type="radio" name="geodesic_size" value="5626" checked> <label for="p30">p30</label> </div>

about 4 years ago · Juan Pablo Isaza Relatório

0

  • No hubo cambios importantes, solo agregué <div id="calculator"></div> .

Como #calculator input[type=radio] esto significa seleccionar todas las entradas con tipo igual a radio, que son hijos de id #calculator .

  • Luego, seleccionó todas las entradas en bucle a través de ellas, adjunte el evento onclick y coloque su lógica para la función active() allí.
  • Para ver el efecto visual agregado .active{background-color:red;} css.

 var radios = document.querySelectorAll('#calculator input[type=radio]'); var label = document.querySelectorAll("#calculator label"); radios.forEach(radioBtn => { radioBtn.onclick = function() { radios.forEach((el, index) => { console.log(el.checked); if (el.checked === true) { console.log('true'); label[index].classList.add('active'); } else { console.log('false'); label[index].classList.remove('active'); } }) }; })
 .active { background-color: red; }
 <div id="calculator"> <input id="p75" type="radio" name="geodesic_size" value="11250"> <label for="p75">p75</label> <input id="p30" type="radio" name="geodesic_size" value="5626" checked> <label for="p30">p30</label> </div>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda