Javascript 默认后提交表单

Javascript 默认后提交表单,javascript,jquery,forms,Javascript,Jquery,Forms,我正在尝试在表单提交之前对其进行验证。我尝试了几种方法,但我无法在默认情况下提交表单。这是我目前掌握的代码: $('#formquote').submit(function(e){ e.preventDefault(); console.log('here'); validating = true; var tval = valText('input[name=contactname]'); var pval =

我正在尝试在表单提交之前对其进行验证。我尝试了几种方法,但我无法在默认情况下提交表单。这是我目前掌握的代码:

$('#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
如果您能提供任何帮助,我们将不胜感激。

与其总是阻止表单提交,还不如进行验证并在通过后再次提交,为什么不在验证失败时阻止提交呢?大概是这样的:

$('#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();
    }
});
与其总是阻止表单提交,进行验证并在通过时再次提交,为什么不在验证失败时阻止提交呢?大概是这样的:

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

我想公认的答案是最好的方法,但如果出于某种原因,您需要先使用
preventDefault()
然后提交表单,这对我很有用:

$('#formquote').on('submit', function (e) {
  e.preventDefault();
  // Do validation stuff..
  // Then submit the form
  $(this).submit();
}

我想公认的答案是最好的方法,但如果出于某种原因,您需要先使用
preventDefault()
然后提交表单,这对我很有用:

$('#formquote').on('submit', function (e) {
  e.preventDefault();
  // Do validation stuff..
  // Then submit the form
  $(this).submit();
}


您不应该使用
eval
作为变量名,这是一个本机javascript方法。您能否检查解除绑定是否成功(即,它不会再次调用您的函数)@大卫,如果这不是一个保留字,你可以用它。@Qantas94Heavy,没错,这就是为什么我把它做成一个评论,而不是一个答案。。。我写了不该写的。我可以写
Object=0
,但这并不意味着这是个好主意…@david:我注意到当它在这里变成蓝色的时候,哈哈,我把它重命名了,问题也解决了remained@David:好的,明白你的意思了。你不应该使用
eval
作为变量名,这是一个本地javascript方法。你能检查一下解除绑定是否成功吗(即,它不会再次调用您的函数).@David如果不是保留字,你可以用它。@Qantas94Heavy没错,这就是为什么我把它做成评论,而不是回答…我写了不应该不能。我可以写
Object=0
,但这并不意味着这是个好主意…@David:我注意到当它在这里变成蓝色的时候,哈哈,我把它和这个问题重新命名了remained@David: 好的,明白你的意思了。嗨,Anthony,我也试过了,e.preventDefault只在函数的第一行起作用unfortunately@user2902832这不是真的,除非前面的一行代码抛出一个错误,导致
e.preventDefault()
line永远不会执行。检查浏览器的开发人员工具是否存在错误,修复这些错误,然后看看会发生什么。@user2902832这没有意义,请看以下示例:抱歉,你说得对。我在另一条评论中提到,已将eval更改为emval,但在if语句中忽略了更改。现在可以使用了,谢谢!嗨,Anthony,我也试过了,例如,preventDefault只有在函数的第一行才起作用unfortunately@user2902832这不是真的,除非前面的一行代码抛出一个错误,导致
e.preventDefault()
line永远不会执行。检查浏览器的开发人员工具是否有错误,修复错误,然后看看会发生什么。@user2902832这没有意义,请看以下示例:抱歉,你是对的。我已将eval更改为emval,正如我在另一条评论中提到的那样,但在if语句中忽略了更改此项。现在可以使用了,谢谢!