Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

187
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!