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

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

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 Report

0

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

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