1

在 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 会打开一个新标签页?

我也尝试了按钮而不是提交,但同样的问题。

4

2 回答 2

1

不要在提交按钮单击或表单提交事件中提交表单

利用

$('#deleteMessages').on('submit', function(e){
  e.preventDefault();
  //some logic here
  some AJAX here!
});

或者

$('#deleteMessages').on('submit', function(e){
  //some logic here
});
于 2013-02-13T10:34:34.003 回答
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']务必更改逻辑或添加隐藏字段。

于 2014-10-20T10:08:42.637 回答