2013-02-13 60 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