2013-02-13 5 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, Chrome, Opera, но не в Safari (в ОС Windows). Что случилось в Safari, так это то, что он открывает новую вкладку с тем же содержимым, что и страница. В чем проблема? Почему Safari открывает новую вкладку?

Я также попробовал кнопку вместо отправки, но такую ​​же проблему.

+0

Я попробовал свой код в сафари и его работе. –

+0

какая версия u пробовала? –

ответ

1

НЕ отправить форму в кнопку отправки мыши или события формы представления

Использование

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

ИЛИ

$('#deleteMessages').on('submit', function(e){ 
    //some logic here 
}); 
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); 
      } 
     }); 
    }); 

Тайм-аут необходимо, в противном случае момент, когда вы звоните .submit() на сафари, все остальное задерживается в очереди.

Работает в Safari, Chrome и Firefox на Mac (возможно, на Windows тоже).

Edit: Также проверена и работает в IE9 на Windows 7.

Кроме того, не забывайте, что делать это удалит $_POST['SubmitButtonName'] из списка опубликованных переменных. Поэтому, если вы делаете проверки против $_POST['buttonName'], обязательно измените свою логику или добавьте скрытое поле.

+1

Нужно исследовать, почему тайм-аут необходим, но за 5 минут до начала концерта это сработало для меня. – Ithar