Jquery在Safari中提交表单

时间:2013-02-13 10:26:13

标签: jquery html forms safari submit

在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会打开一个新选项卡?

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

2 个答案:

答案 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']进行检查,请务必更改逻辑或添加隐藏字段。