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

208
Views
Eliminar el atributo de desactivación de un botón después de la validación de entrada

Tengo un formulario con un botón deshabilitado al principio y si deja una entrada vacía o la llena con algo que no sean números, generará un error y si inserta un número, el error se eliminará. Mi pregunta es cómo puedo eliminar el atributo de desactivación del botón después de que todas las entradas estén libres de errores. Aquí lo que he intentado hasta ahora:

 $("input").blur(function () { if (!Number($(this).val()) || $(this).val() === "") { $(this).addClass("raise-error"); } else { $(this).removeClass("raise-error"); } });
 * { padding: 0; margin: 0; box-sizing: border-box; } body { font-family: "Montserrat", sans-serif; scroll-behavior: smooth; text-align: center; overflow-x: hidden; color: #08085c; background-color: #111; } .container { width: 80%; height: 50vh; background-color: #fff; margin: auto; display: flex; } .team { width: 50%; height: 100%; display: flex; flex-direction: column; gap: 10px; justify-content: center; align-items: center; } .team-a { background-color: bisque; } .error { text-align: right; color: red; opacity: 0; } .raise-error + .error { opacity: 1; } input.raise-error { border: 1px solid red; } .record-box { margin-top: 20px; } label { margin-right: 10px; } .btn { margin-top: 20px; padding: 10px 20px; cursor: pointer; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="team team-a"> <h2>Team A Records</h2> <div class="record-box"> <div class="input-field"> <label for="record-1"> Record 1</label> <input type="text" id="record-1" /> <div class="error">number please</div> </div> <div class="input-field"> <label for="record-2"> Record 2</label> <input type="text" id="record-2" /> <div class="error">number please</div> </div> <div class="input-field"> <label for="record-3"> Record 3</label> <input type="text" id="record-3" /> <div class="error">number please</div> </div> </div> </div> <button class="btn" disabled>Submit</button>

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

  • Puede dar a las entradas un atributo predeterminado como data-valid="false" .
  • Cuando un campo está borroso, puede cambiar el valor del atributo a verdadero después de validarlo con éxito.
  • Luego puede habilitar el botón si todos los data-valid="false" se cambian a data-valid="true"

Prueba esto

 $("input").blur(function() { if (!Number($(this).val()) || $(this).val() === "") { $(this).addClass("raise-error"); $(this).attr('data-valid', 'false'); } else { $(this).removeClass("raise-error"); $(this).attr('data-valid', 'true'); } $('.btn')[$('[data-valid="false"]').length > 0 ? 'attr' : 'removeAttr']('disabled', 'disabled'); });
 * { padding: 0; margin: 0; box-sizing: border-box; } body { font-family: "Montserrat", sans-serif; scroll-behavior: smooth; text-align: center; overflow-x: hidden; color: #08085c; background-color: #111; } .container { width: 80%; height: 50vh; background-color: #fff; margin: auto; display: flex; } .team { width: 50%; height: 100%; display: flex; flex-direction: column; gap: 10px; justify-content: center; align-items: center; } .team-a { background-color: bisque; } .error { text-align: right; color: red; opacity: 0; } .raise-error+.error { opacity: 1; } input.raise-error { border: 1px solid red; } .record-box { margin-top: 20px; } label { margin-right: 10px; } .btn { margin-top: 20px; padding: 10px 20px; cursor: pointer; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="some-container"> <div class="team team-a"> <h2>Team A Records</h2> <div class="record-box"> <div class="input-field"> <label for="record-1"> Record 1</label> <input type="text" id="record-1" data-valid="false" /> <div class="error">number please</div> </div> <div class="input-field"> <label for="record-2"> Record 2</label> <input type="text" id="record-2" data-valid="false" /> <div class="error">number please</div> </div> <div class="input-field"> <label for="record-3"> Record 3</label> <input type="text" id="record-3" data-valid="false" /> <div class="error">number please</div> </div> </div> </div> <button class="btn" disabled>Submit</button> </div>

about 4 years ago · Santiago Trujillo Report

0

La forma más directa y segura es reutilizar su función de validación para probar tanto si la entrada es válida como si todas las entradas son válidas.

El siguiente ejemplo coloca las entradas donde se adjunta el desenfoque en la variable allInputs , y el botón está deshabilitado si no todas las entradas son válidas (con cada función llamando a la misma funcionalidad isValid )

 const allInputs = $("input").blur(function () { const isValid = val => val !== "" && Number(val); $(this).toggleClass("raise-error",!isValid(this.value)); $('.btn')[0].disabled = !allInputs.toArray().every(i=>isValid(i.value)); });
 * { padding: 0; margin: 0; box-sizing: border-box; } body { font-family: "Montserrat", sans-serif; scroll-behavior: smooth; text-align: center; overflow-x: hidden; color: #08085c; background-color: #111; } .container { width: 80%; height: 50vh; background-color: #fff; margin: auto; display: flex; } .team { width: 50%; height: 100%; display: flex; flex-direction: column; gap: 10px; justify-content: center; align-items: center; } .team-a { background-color: bisque; } .error { text-align: right; color: red; opacity: 0; } .raise-error + .error { opacity: 1; } input.raise-error { border: 1px solid red; } .record-box { margin-top: 20px; } label { margin-right: 10px; } .btn { margin-top: 20px; padding: 10px 20px; cursor: pointer; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="team team-a"> <h2>Team A Records</h2> <div class="record-box"> <div class="input-field"> <label for="record-1"> Record 1</label> <input type="text" id="record-1" /> <div class="error">number please</div> </div> <div class="input-field"> <label for="record-2"> Record 2</label> <input type="text" id="record-2" /> <div class="error">number please</div> </div> <div class="input-field"> <label for="record-3"> Record 3</label> <input type="text" id="record-3" /> <div class="error">number please</div> </div> </div> </div> <button class="btn" disabled>Submit</button>

about 4 years ago · Santiago Trujillo Report

0

Si el siguiente código no funciona:

 if ($('.raise-error').length > 0) { $('.btn').attr( 'disabled', true ); return true; }

Luego, intente cambiar la etiqueta del botón con:

 <input type="button" class="btn">
about 4 years ago · Santiago Trujillo 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!