2009-11-20 48 views
5

即時通訊做一個表單驗證,我想驗證輸入字段時使用jquery.scrollTo「上提交」如果錯誤林去錯誤:取消在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 :(
     } 
    }); 

}); 

的問題是,當錯誤返回犯規取消提交,不運行return false;行。

它的工作原理確定,當

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

可是所以永遠不會提交。我希望你能理解我:)謝謝:)

回答

12

我會用e.preventDefault()這樣的:

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

只是一定到e參數提供給提交函數調用(代碼塊中第一行)。

6

你從#each函數返回,而不是#submit。做這樣的事情,而不是:

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

你也可以做e.preventDefault()停止表單被提交。