javascript - AJAX之前preventDefault,表单仍然提交成功

标签 javascript jquery ajax

我正在尝试制作一个表单,要求在提交之前满足某些条件。这里遇到了一些 ajax 问题..

 $('form').submit(function(event){
     form = $(this); // I've tried just: this. Same result
     material = $('#material'). val();
     hours = $('#hours'). val();

     // - Material and Hours are numbers
     if(isNaN(material)) {
         event.preventDefault();
         alert('Please enter a number for Material');
     }
     if(isNaN(hours)) {
         event.preventDefault();
         alert('Please enter a number for Hours');
     }


     event.preventDefault();
     $.ajax({
         url : 'page.php',
         data : {
             'id' : {{ id }}
         },
         type : 'post',
         dataType: "json",
         success : function(data){
            console.log(data);
            if(data.job_num == {{ job_id }}) {
                form.submit();
            } else {
                alert('Please enter a valid number');
            }
        },
        error: function(){
            alert('Please enter a valid number');                    
        }
    });

});

如您所见,hours 可能是 NaN 并且表单不会提交。但是当它到达 ajax 时并且如果成功,表单将即使 hours 仍然是 NaN 也提交..

我尝试将 ajax 放在 if 语句之前,结果相同。不确定这是否是我忽略的简单内容,或者是否真的这么复杂。

最佳答案

在发生 alert() 错误后放置一个 return; ,无论如何它都会结束事件函数。

event.preventDefault() 将阻止 form 提交,而不是执行其余函数,这就是您的 ajax 请求不断执行的原因。

关于javascript - AJAX之前preventDefault,表单仍然提交成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32849804/

相关文章:

jquery - 编写移动网站的最佳方法?

javascript - Jquery Prop 功能未按预期工作

javascript - 如何在“编辑”按钮单击上获取 <td name ="pname"> 值

jquery - AJAX 重写后如何重新绑定(bind)对话框?

javascript - jquery 检查 URL 是否已经有查询字符串

javascript - 可以在 head 标签中动态包含不同版本的 Bootstrap 吗?

javascript - 阻止 onclick jquery 函数以允许 onclick ajax 提交

javascript - React 不渲染来自回流存储的数据

javascript - 从 setTimeout 返回一个值

javascript - 如果我通过特定链接转到页面,如何在页面上应用 jQuery 的 load() 函数