1

我正在尝试在提交表单之前对其进行验证。我尝试了几种方法,但在 preventDefault 之后我无法提交表单。这是我目前的代码:

$('#formquote').submit(function(e){
        e.preventDefault(); 
        console.log('here');
        validating = true;
        var tval = valText('input[name=contactname]');
        var pval = valPhone('input[name=telephone]');
        var eval = valEmail('input[name=email]');

        console.log(tval);
        console.log(pval);
        console.log(eval);

        if(tval && pval && eval){
            $("#formquote").unbind('submit');
            $("#formquote").submit();
        }
    });

控制台记录您可以看到预期的输出(分别为“here”、true、true、true) 在您第二次按下按钮时提交表单的那一刻。我也尝试了以下建议,但无济于事:

-> $("#formquote").unbind('submit').submit(); //same result
-> $("#formquote").submit(); //by itself, infinite loop
-> $("#formquote")[0].submit(); //non function error
-> $('#formquote').unbind('submit', preventDefault); //'preventDefault' not defined

任何帮助,将不胜感激

4

2 回答 2

4

不要总是阻止表单提交,进行验证并在通过时再次提交,为什么不在验证失败时阻止提交?像这样的东西:

$('#formquote').submit(function (e) {
    validating = true;
    var tval = valText('input[name=contactname]');
    var pval = valPhone('input[name=telephone]');
    var eval = valEmail('input[name=email]');

    if (!(tval && pval && eval)) {
        e.preventDefault();
    }
});
于 2013-11-06T11:12:20.687 回答
-2

I guess the accepted answer is the best way of doing this, but if, for some reason, you need to use preventDefault() first and then submit the form, this works for me:

$('#formquote').on('submit', function (e) {
  e.preventDefault();
  // Do validation stuff..
  // Then submit the form
  $(this).submit();
}
于 2015-10-08T09:34:44.683 回答