Javascript preventDefault在Safari的表单提交中不起作用

Javascript preventDefault在Safari的表单提交中不起作用,javascript,html,forms,safari,preventdefault,Javascript,Html,Forms,Safari,Preventdefault,我正试图让Safari验证我的表单,并在必填字段未填写时阻止其提交。我目前有以下提交功能 $('#qtrAuditform').on('submit', function(event) { event.preventDefault(); var uagent = navigator.userAgent.toLowerCase(); if (/safari/.test(uagent) && !/chrome/.test(uagent)) { //If requi

我正试图让Safari验证我的表单,并在必填字段未填写时阻止其提交。我目前有以下提交功能

$('#qtrAuditform').on('submit', function(event) {
  event.preventDefault();
  var uagent = navigator.userAgent.toLowerCase();
  if (/safari/.test(uagent) && !/chrome/.test(uagent)) {
    //If required attribute is not supported or browser is Safari (Safari thinks that it has this attribute, but it does not work), then check all fields that has required attribute
    $("#qtrAuditform [required]").each(function(index) {
      if (!$(this).val()) {
        //If at least one required value is empty, then ask to fill all required fields.
        alert("Please fill all required fields.");
        event.preventDefault();
        return false;
      }
    });
  }
  var $form = $(this),
    data = $form.serialize();
  var url = 'http://localhost:8888/datatest';
  $.ajax({
    type: 'POST',
    url: url,
    data: data,
    success: function() {
      alert('Your form has been successfully submitted!');
    },
    fail: function() {
      alert('something went wrong...try again');
    }
  });
});

我收到通知,请填写必填字段,但在收到通知后,我也立即收到表单已提交的通知。我怎样才能在仍然填写需要填写的字段时不提交表单?

整个事件应立即返回false

    $('#qtrAuditform').on('submit', function(event) {
  event.preventDefault();
  var uagent = navigator.userAgent.toLowerCase();
  if (/safari/.test(uagent) && !/chrome/.test(uagent)) {
    //If required attribute is not supported or browser is Safari (Safari thinks that it has this attribute, but it does not work), then check all fields that has required attribute
    $("#qtrAuditform [required]").each(function(index) {
      if (!$(this).val()) {
        //If at least one required value is empty, then ask to fill all required fields.
        alert("Please fill all required fields.");
        event.preventDefault();
        return false;
      }
    });
  }
  var $form = $(this),
    data = $form.serialize();
  var url = 'http://localhost:8888/datatest';
  $.ajax({
    type: 'POST',
    url: url,
    data: data,
    success: function() {
      alert('Your form has been successfully submitted!');
    },
    fail: function() {
      alert('something went wrong...try again');
    }
  }); 
 //Return false immediately
 return false;
});

我希望这会有所帮助。

这就是我现在拥有的,有效的

$'qtrAuditform'。在'submit'上,functionevent{ //event.preventDefault; var uagent=navigator.userAgent.toLowerCase; if/safari/.testuagent&!/chrome/.testuagent{ //如果不支持required属性或浏览器为Safari Safari认为它具有此属性,但不起作用,则检查具有required属性的所有字段 $qtrAuditform[必需]。每个函数索引{ 如果!$this.val{ //如果至少有一个必填值为空,则要求填写所有必填字段。 请填写所有必填字段。; //违约事件; 返回false; } }; 返回false; } var$form=$this, 数据=$form.serialize; var url='1〕http://localhost:8888/datatest'; $.ajax{ 键入:“POST”, url:url, 数据:数据, 成功:功能{ //window.location=http://www.google.com; 警告“您的表单已成功提交!”;         }, 失败:函数{ 警告“出现问题……请再试一次”;         }     }; 返回false;
};返回错误;必须应用于事件侦听器函数,而不是每个中的函数。另外,您有两次event.preventDefault;但我仍然得到相同的结果。建议?我尝试过这个,但仍然得到和以前一样的结果。