2009-11-20 14 views
5

estoy haciendo una validación de formularios y quiero validar los campos de entrada cuando "en la presente" si el error Im usando jquery.scrollTo para ir al error:cancelar una presentación en jquery?

$('#form_inscripcion').submit(function() { 
    //se traen todos los inputs del formulario 
    var $inputs = $('#form_inscripcion :input'); 

    $inputs.each(function() { 
     var encontro_error = validar($(this)); //uses dependence ok 
     if (encontro_error){ 
      $.scrollTo('input#'+$(this).attr('id'), 800); //go to error 
      return false; // dont submit!... but seems not enter here :(
     } 
    }); 

}); 

El problema es, cuando el error devuelto duerma cancelar el presente , no ejecuta la línea return false;.

funciona bien cuando

<form id="form_inscripcion" name="form" method="post" action="some" onsubmit="return false"> 

Pero es así, nunca lo presenta. Espero que me entiendas :) gracias :)

Respuesta

12

usaría e.preventDefault() así:

$('#form_inscripcion').submit(function(e) { 
    //se traen todos los inputs del formulario 
    var $inputs = $('#form_inscripcion :input'); 

    $inputs.each(function() { 
     var encontro_error = validar($(this)); //uses dependence ok 
     if (encontro_error){ 
      $.scrollTo('input#'+$(this).attr('id'), 800); //go to error 
      e.preventDefault(); // Cancel the submit 
      return false; // Exit the .each loop 
     } 
    }); 
}); 

Sólo asegúrese de suministrar el parámetro e a la llamada a la función enviar (primera línea en el bloque de código).

6

Estás regresando de la función #each, no #submit. Hacer algo como esto en su lugar:

$('#form_inscripcion').submit(function(e) { 
     //se traen todos los inputs del formulario 
     var $inputs = $('#form_inscripcion :input'); 
     var returnVal = true; 
     $inputs.each(function() { 
       var encontro_error = validar($(this)); //uses dependence ok 
       if (encontro_error){ 
         $.scrollTo('input#'+$(this).attr('id'), 800); //go to error 
         returnVal = false; 
         return false; // returning false here breaks out of $.each. 
       } 
     }); 
     return returnVal; 
}); 

También podría hacer e.preventDefault() para detener la forma de ser presentado.

Cuestiones relacionadas