2009-11-20 6 views
5

sto facendo una validazione dei form e voglio per convalidare i campi di input quando "su submit" Se l'errore Im usando jquery.scrollTo andare all'errore:annulla un invio in 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 :(
     } 
    }); 

}); 

Il problema è che, quando l'errore restituito doesnt annullare il submit , non esegue la riga return false;.

funziona bene quando

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

Ma così, non sarà mai sottomette. Spero che tu mi capisca :) grazie :)

risposta

12

userei e.preventDefault() come questo:

$('#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 
     } 
    }); 
}); 

Basta essere sicuri di fornire il parametro e alla chiamata di funzione presentare (prima riga nel blocco di codice).

6

Si sta tornando dalla funzione #each, non #submit. Fare qualcosa di simile, invece:

$('#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; 
}); 

Si potrebbe anche fare e.preventDefault() per fermare il modulo venga inviato.