4

即使有preventdefaultreturnvalue = false,表单仍然会在IE中提交。 Chrome和Firefox中的一切都很好。我也试过event.stopPropagation()event.preventDefault? event.preventDefault():event.returnValue = false;不在IE8中工作

$('#form1').submit(function(event) { 
    var xxx = $('#xxx').val(); 
    var yyy = $('#yyy').val(); 
    var zzz = $('#zzz').val(); 
    var uuu = $('#uuu').val(); 
    if (zzz != '000000' && zzz != '') { 
     validate_xxxyyy(uuu, function(response) { 
      if (response === false) { 
       if (xxx == '') { 
        alert("XXX undefined!"); 
        event.preventDefault ? event.preventDefault() : event.returnValue = false; 
       } 
       else if (yyy == '') { 
        alert("yyy Undefined!"); 
        event.preventDefault ? event.preventDefault() : event.returnValue = false; 
       } 
      } 
      else { 
       return true; 
      } 
     }); 
    } 
    else { 
     return true; 
    } 
}); 

function validate_xxxyyy(uuu, callback) { 
    var data_string = 'uuu=' + uuu; 
    $.ajax({ 
     url: 'ajax.php', 
     type:'POST', 
     data: data_string, 
     dataType: 'json', 
     cache: false, 
     async: false, 
     success: function(response){ 
      callback(response); 
     } 
    }); 
} 

回答

1

你的问题是关于deffered functions。在

你的成功的功能:

$.ajax({ 
     url: 'ajax.php', 
     type:'POST', 
     data: data_string, 
     dataType: 'json', 
     cache: false, 
     async: false, 
     success: function(response){ 
      callback(response); 
     } 
    }); 

是defferred。把它看作是线程的。所以submit继续而不等待回调发生。所以它不叫event.preventDefault(),或者更精确地说,它确实但已经太晚了,提交已经返回。

我会改变什么是从提交按钮(我猜它是目前)调用这个到一个正常的按钮然后验证它,然后只提交表单,如果此验证成功使用$('form').submit();

$('#button').click(function(event) { 
    var xxx = $('#xxx').val(); 
    var yyy = $('#yyy').val(); 
    var zzz = $('#zzz').val(); 
    var uuu = $('#uuu').val(); 
    if (zzz != '000000' && zzz != '') { 
     validate_xxxyyy(uuu, function(response) { 
      if (response === false) { 
       if (xxx == '') { 
        alert("XXX undefined!"); 

       } 
       else if (yyy == '') { 
        alert("yyy Undefined!"); 

       } 
      } 
      else { 
       $('#form1').submit(); 
      } 
     }); 
    } 
    else { 
     $('#form1').submit(); 
    } 
}); 

function validate_xxxyyy(uuu, callback) { 
    var data_string = 'uuu=' + uuu; 
    $.ajax({ 
     url: 'ajax.php', 
     type:'POST', 
     data: data_string, 
     dataType: 'json', 
     cache: false, 
     async: false, 
     success: function(response){ 
      callback(response); 
     } 
    }); 
} 
+0

你确实注意到'async:false'? – adeneo

+2

没关系。无论如何,成功的功能是无可否认的。所以提交总会发生。 – Liam

+0

你能否以某种方式指导我使代码工作? – mend

-1

地说:event.preventDefault()第一,如:

$('#form1').submit(function(event) { 
    event.preventDefault(); 
    var xxx = $('#xxx').val(); 
    var yyy = $('#yyy').val(); 
    ... 

或者你需要重写形式onsubmit事件,防止提交:

+0

完全错过了这一点。如果他这样做,表单将**从未**提交 – Liam

+0

如何通过Ajax无法停止/预先结束其默认行为来提交表单? – Darkagelink

+0

他不是。他发送一个异步调用服务器和**如果**这个成功,他然后提交的表格 – Liam

2

开始通过防止从形式提交,做ajax调用异步验证,并且如果它验证您使用未由事件处理程序捕获的本机提交进行提交:

$('#form1').on('submit', function(event) { 
    event.preventDefault(); 
    var self = this, 
     xxx = $('#xxx').val(), 
     yyy = $('#yyy').val(), 
     zzz = $('#zzz').val(), 
     uuu = $('#uuu').val(); 

    if (zzz != '000000' && zzz != '') { 
     validate_xxxyyy(uuu).done(function(response) { 
      if (!response) { 
       if (xxx == '') { 
        alert("XXX undefined!"); 
       } 
       else if (yyy == '') { 
        alert("yyy Undefined!"); 
       } 
      } 
      else { 
       self.submit(); 
      } 
     }); 
    } else { 
     self.submit(); 
    } 
}); 

function validate_xxxyyy(uuu) { 
    var data_string = 'uuu=' + uuu; 
    return $.ajax({ 
     url: 'ajax.php', 
     type:'POST', 
     data: data_string, 
     dataType: 'json', 
     cache: false 
    }); 
} 
+0

是的!并让你的ajax调用异步....多数民众赞成A在Ajax! :) – Liam

+0

我试过这段代码,它的大部分工作,但仍然有一点点错误。 self.submit();那是在validate_xxxyyy {}里面没有POST submit1变量。那是可能是什么问题? – mend

+0

'self.submit()'调用本地'submit'事件,并提交表单,就像它提交时使用按钮的方式一样,所以如果你错过了可能没有填写的东西,没有名称或其他东西在HTML中是错误的,因为'self.submit()'只提交HTML元素,就像它们通过默认'submit'提交一样。 – adeneo

-1
$('#form1').submit(function(event) { 
    var xxx = $('#xxx').val(); 
    var yyy = $('#yyy').val(); 
    var zzz = $('#zzz').val(); 
    var uuu = $('#uuu').val(); 
    if (zzz != '000000' && zzz != '') { 
     validate_xxxyyy(uuu, function(response) { 
      if (!response) { 
       if (xxx == '') { 
        alert("XXX undefined!"); 
        event.preventDefault ? event.preventDefault() : event.returnValue = false; 
       } 
       else if (yyy == '') { 
        alert("yyy Undefined!"); 
        event.preventDefault ? event.preventDefault() : event.returnValue = false; 
       } 
      } 
      else { 
       return true; 
      } 
     }); 
    } 
    else { 
     return true; 
    } 
}); 
+0

错误....!这不会有什么区别 – Liam

+0

还是错的。这个问题是由延迟函数引起的。 – Liam

相关问题