У меня возникли проблемы с чем-то очень похожим, когда при отправке платежной формы мы отображали всплывающее окно загрузки, которое охватывало весь экран, чтобы попытаться остановить людей от перезагрузки страницы и повторной отправки, если они считают, что это занимает слишком много времени. Однако в Safari загрузчик никогда не появлялся.
После просмотра консоли на предмет подсказок я понял, что все изменения CSS происходят и применяются к странице, однако я просто не вижу их отраженных на экране.
Я пришел к выводу, что это связано с тем, как сафари обрабатывает рендеринг контента во время загрузки страницы. После запуска загрузки страницы (т. Е. По ссылке или при отправке формы) safari перестает отображать любые дальнейшие изменения на экране.
Это означает, что вам нужно включить анимацию загрузки перед тем, как отключить отправку. Применение такого рода мышления к моему собственному коду решило проблемы.
Для вас это будет означать что-то вроде этого ...
$(document).ready(function() {
$('#addnews').submit(function(e) {
e.preventDefault();
$('#loading').show();
$(this).submit();
});
});
Однако возникает еще одна проблема, так как submit - это инициирующее событие, а событие, которое мы хотим запустить, создает бесконечный цикл, который никогда не будет отправлен из-за того, что мы предотвращаем дефолт.
Чтобы решить эту проблему, вам либо не нужно запускать все из отправки, либо мы можем сделать что-то вроде этого ...
$(document).ready(function() {
$('#addnews').each(function(){
this.preventNextSubmit = true;
}).submit(function(e) {
if(this.preventNextSubmit == true){
this.preventNextSubmit = false;
e.preventDefault();
$('#loading').show();
$(this).submit();
}
});
});
Этот пример изначально добавляет логическое значение к форме, установленной в значение true. Если это правда, он подавляет отправку формы и вместо этого показывает анимацию, затем он сбрасывает логическое значение и вызывает повторную отправку, которая теперь будет просто отправлена как обычно.
Надеюсь, это поможет:)