Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
¿Cómo hago que mi código JavaScript para agregar una nueva clase a HTML sea más receptivo?
<div class="control"> <input type="email" id="email" class="email-address" onblur="getValEmail()" /> <label for="email">Email</label> </div> <div class="control box"> <textarea id="message" onblur="getValMsg()"></textarea> <label for="message">message</label> </div> function getValEmail() { const valEmail = document.getElementById("email"); valEmail.addEventListener("blur", function () { if (valEmail.value) valEmail.parentElement.classList.add("filled"); else valEmail.parentElement.classList.remove("filled"); }); } function getValMsg() { const valMsg = document.getElementById("message"); valMsg.addEventListener("blur", function () { if (valMsg.value) valMsg.parentElement.classList.add("filled"); else valMsg.parentElement.classList.remove("filled"); }); } .filled label, input:focus + label, textarea:focus + label { top: 0; font-size: 1.2rem; }

Estos son los códigos HTML, Javascript y CSS en orden. Lo que estoy tratando de lograr aquí es que una vez que el usuario escribe la dirección de correo electrónico/mensaje, las etiquetas que están dentro de la entrada/área de texto aumentan. Por lo tanto, cuando se llenan las entradas/áreas de texto, las etiquetas deberían desaparecer en la parte superior. Hace su trabajo pero no responde. La clase "llena" se agrega después de un par de clics más, lo que significa que las etiquetas solo suben a la parte superior después de hacer clic en el cuadro nuevamente.

ingrese la descripción de la imagen aquí

El resultado se parece a esto.

ingrese la descripción de la imagen aquí

Esto solo se logra después de unos pocos clics más en el cuadro.

about 4 years ago · Santiago Gelvez
2 Respuestas
Responde la pregunta

0

No necesitas js aquí en absoluto. La :placeholder-shown hará lo que realmente necesita lograr (tenga en cuenta los atributos de placeholder de posición no vacíos necesarios para Chrome):

 .control { position: relative; margin-top: 20px; } input+label, textarea+label { position: absolute; left: 0; top: 0; transition: 300ms; } input:focus+label, input:not(:placeholder-shown)+label, textarea:focus+label, textarea:not(:placeholder-shown)+label { top: -20px; }
 <div class="control"> <input type="email" id="email" class="email-address" placeholder=" " /> <label for="email">Email</label> </div> <div class="control box"> <textarea id="message" placeholder=" "></textarea> <label for="message">message</label> </div>

Aquí hay un codepen .

about 4 years ago · Santiago Gelvez Denunciar

0

En su uso de css: transform:translateY(-2em) cambie de acuerdo con su ajuste.

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda