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

204
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

0

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

about 4 years ago · Santiago Gelvez 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