2013-02-13 49 views
0

在HTML:的Jquery提交表单在Safari

<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,铬,歌剧而不是在Safari浏览器(在Windows )。 Safari中发生的事情是,它会打开一个与页面内容相同的新标签页。有什么问题?为什么Safari会打开一个新选项卡?

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

+0

我已经尝试在safari中的代码和它的工作。 – 2013-02-13 10:31:58

+0

你试过了什么版本? – 2013-02-13 10:54:02

回答

1

在一个提交按钮点击或表单提交事件不提交表单

使用

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

OR

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

我遇到过这个问题也和找不到合适的修复。

取而代之,我这样做:

首先,将您的提交更改为按钮。

<input type="button" value="Submit" class="btn loading"> 

导入jQuery验证,这将确保任何 “必需” 字段在提交前得到验证:

<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); 
      } 
     }); 
    }); 

的时间出来是必要的,否则,那一刻你打电话.submit()上的Safari浏览器,其他一切都在排队延迟。

适用于Mac上的Safari,Chrome和Firefox(也可能在Windows上)。

编辑:还测试,而在Windows 7

此外,在IE9工作,不要忘了,这样做会从您发布的变量列表中删除$_POST['SubmitButtonName']。因此,如果您要对$_POST['buttonName']进行检查,请务必更改您的逻辑或添加隐藏字段。

+1

需要进一步调查为什么超时需要,但在上线前5分钟这为我工作。 – Ithar 2017-06-20 14:03:27