У меня есть функция JavaScript, которая отправляет форму.Safari не обновляет пользовательский интерфейс во время отправки формы
Первый шаг моей функции - отключить его (чтобы предотвратить несколько кликов) и применить класс, который лучше иллюстрирует, что он отключен. Я также меняю текст на «Пожалуйста, подождите ...»
Следующим шагом является подтверждение моей формы. Если проверка не выполнена, верните изменения на первом шаге, чтобы вернуть кнопку в нормальное состояние.
Если валидация прошла, отправьте форму.
Все это в основном происходит в одном процессе.
То, что я нахожу, происходит в том, что в Safari первый этап процесса (стили кнопок) почти игнорируется. После дальнейшего копания я понял, что он работает, но пользовательский интерфейс не перерисовывается до завершения процесса. Проблема здесь в том, что завершение процесса является перенаправлением от страницы, поэтому пользователь никогда не увидит «Пожалуйста, подождите ...»
Затем я исследовал, почему Safari не перерисовывает пользовательский интерфейс, и я обнаружил ряд исправлений для этого, один из таких примеров ниже:
// Aims to trigger the redraw by 'resetting' it
elem.style.display='none';
elem.offsetHeight;
elem.style.display='';
Еще один я пытался намеренно скрывается и показывающий элемент до/после обновления с использованием прототипа (который является основной библиотекой JavaScript в системе):
elem.hide();
elem.addClassName('disabledBtn');
elem.disable();
elem.update('Please Wait');
elem.show();
Другим было создание e «перерисовать» метод, чтобы заставить перерисовать.
Element.addMethods({
redraw: function(element){
element = $(element);
var n = document.createTextNode(' ');
element.appendChild(n);
(function(){n.parentNode.removeChild(n)}).defer();
return element;
}
});
...
elem.addClassName('disabledBtn');
elem.disable();
elem.update('Please Wait');
elem.redraw();
Ни один из этих элементов не будет работать. Процесс не будет обновлять пользовательский интерфейс до завершения, а пользователь перенаправляется. Для справки, это довольно интенсивная форма с хорошими несколькими секундами обработки, требуемыми во время ее представления, так что это кошмар UX.
Неужели кто-то еще сталкивается с этой ситуацией?