jQuery表单验证 - 在preventDefault之后无法提交

时间:2014-11-12 11:18:14

标签: javascript jquery forms validation

我刚开始学习jQuery并尝试创建自己的表单验证作为学习方法。

我想要实现的目的是,在提交表单时,它将检查具有类 .required 的任何字段是否为空,如果是,则突出显示该字段。这样可以正常工作,但是当表格填写正确时,它将无法提交。

我真的无法看到我出错的地方。如果有人能提供帮助,我们将不胜感激。

$('#contact').submit(function(event) { 

  event.preventDefault();
  var isFormValid = true;

  $('.required').each(function() {    

    if ($(this).val() == '') { 

       $(this).removeClass("valid").addClass('invalid');
       isFormValid = false;
    }

  });

  if(isFormValid = true) { 
     $('#contact').submit(); 
  }


});

3 个答案:

答案 0 :(得分:2)

您正尝试递归提交表单。当您调用.submit()(这会阻止实际提交)时,会再次触发相同的处理程序。

您还在if分配了标记。 if(isFormValid = true)应该使用==,但无论如何都不需要该代码。

preventDefault移至实际失败的位置,不要尝试重新submit。让它落空。

$('#contact').submit(function(event) { 
  $('.required').each(function() {    
    if ($(this).val() == '') { 
       $(this).removeClass("valid").addClass('invalid');

       // only prevent submit if there is a problem
       event.preventDefault();
    }
  });
});

答案 1 :(得分:1)

我认为第一个$('#contact')。submit(function(event){...})会覆盖$('#contact')。submit(),这可能会导致递归。所以试着这样做

// when user clicks submit
$('#contact').submit(function(event) { 

  // iterates through the inputs with the class 'required'
  $('.required').each(function() {    

    /**
     * we make assumption that it is a valid input.
     * because if a user probably makes a mistake in like more than one of the input 
     * but corrects one of it successfully without knowing 
     * the last other one was still wrong, it will make sense just marking that single field
     * invalid.
     **/
    $(this).addClass('valid');

    if ($(this).val() == '') { 

       // only prevents default when user input is invalid
       event.preventDefault();

       // shows which field is invalid
       $(this).removeClass("valid").addClass('invalid');

    }

  });

});

答案 2 :(得分:0)

if(isFormValid = true){should if if(isFormValide){