代码之家  ›  专栏  ›  技术社区  ›  panchicore

取消jquery中的提交?

  •  5
  • panchicore  · 技术社区  · 16 年前

    我正在进行表单验证,我希望在“提交时”验证输入字段,如果出现错误,我将使用jquery.scrollto转到错误:

    $('#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">
    

    但是,永远不会提交。希望你能理解我:)谢谢:)

    2 回复  |  直到 16 年前
        1
  •  13
  •   Doug Neiner    16 年前

    我会用 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 submit函数调用的参数(代码块的第一行)。

        2
  •  6
  •   Chetan S    16 年前

    你要回来了 #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() 阻止提交表单。

    推荐文章