在HTML中:
<form id="deleteMessages" name="deleteMessages" action="/deleteInboxMessage" method="post">
<!--some input elements here-->
<input type="submit" id="delete" value="delete"/>
</form>
我使用jquery提交表单:
$('#delete').bind('click', function(e){
e.preventDefault();
//some logic here
$('#deleteMessages').submit();
});
适用于Firefox,IE,Chrome,Opera,但不适用于Safari(Windows)。在Safari中发生的事情是它打开一个与页面内容相同的新选项卡。有什么问题?为什么Safari会打开一个新选项卡?
我也试过按钮而不是提交但同样的问题。
答案 0 :(得分:1)
请勿在提交按钮点击或表单提交事件中提交表单
使用
$('#deleteMessages').on('submit', function(e){
e.preventDefault();
//some logic here
some AJAX here!
});
OR
$('#deleteMessages').on('submit', function(e){
//some logic here
});
答案 1 :(得分:1)
我也遇到过这个问题,但找不到合适的修复方法。
相反,我这样做了:
首先,将提交更改为按钮。
<input type="button" value="Submit" class="btn loading">
导入Jquery Validate,这将确保在提交之前验证任何“必需”字段:
<script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.min.js"></script>
然后添加此代码。它适用于您设置class="btn loading"
$(function(){
$(".btn.loading").click(function(e)
{
var btn = $(this);
if (btn.closest('form').valid()) {
btn.html('<i class="fa fa-refresh fa-spin"></i> Uploading...Please wait').prop("disabled",true);
setTimeout(function() {
btn.closest('form').submit();
},100);
}
});
});
超时是必要的,否则你在Safari上调用.submit()的那一刻,其他一切都在队列中被延迟。
适用于Mac上的Safari,Chrome和Firefox(也可能适用于Windows)。
编辑:还在Windows 7上测试并在IE9中工作。
此外,请不要忘记执行此操作会从已发布变量列表中删除$_POST['SubmitButtonName']
。因此,如果您正在对$_POST['buttonName']
进行检查,请务必更改逻辑或添加隐藏字段。