.submit JS, не отображающая наложение CSS в Safari (если я не отменю загрузку страницы)
У меня есть странная проблема с Safari в оверлее, не отображается правильно при отправке формы.
Что должно произойти, когда нажата кнопка отправки в форме, надпись появляется над формой.
Что происходит, так это то, что ничего не появляется (хотя кажется, что что-то не так, как я не могу нажать кнопку снова). Интересно, хотя я должен отменить загрузку страницы, наложение появляется.
Вот код javascript, который запускается, должна быть представлена форма.
function main_form_overlay() {
var form_outer = jQuery('.main-form'),
form = jQuery('.main-form form'),
html,
overlay;
html = '<div class="loading"><span class="text">Checking 77 Destinations, please Be Patient <i class="fa fa-circle-o-notch fa-spin"></i></span></div>';
form_outer.append(html);
overlay = jQuery('.main-form .loading');
form.on('submit', function(){
console.log("In Here!");
if (!overlay.is(':visible')) {
overlay.show();
console.log("Show Overlay");
} else {
overlay.hide();
console.log("Hide Overlay");
}
});
}
Вот CSS для класса "loading", для чего он стоит.
.loading {
background: rgba(#999, 0.9);
bottom: -10px;
display: none;
left: -20px;
position: absolute;
right: -20px;
top: -10px;
.text {
color: #fff;
font-size: 26px;
font-weight: 700;
left: 0;
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 100%;
}
}
JavaScript загружается (консоль записывает фразы "В здесь" и "Показать наложение" соответственно, и в случае отмены появляется оверлей). Однако наложение не появляется при щелчке.
Я пробовал следующие браузеры, успешно....
- Chrome (Apple Mac)
- Firefox (Apple Mac)
- Internet Explorer (Windows)
Любые идеи были бы полезны. Также, если вам нужно что-нибудь еще, пожалуйста, дайте мне знать.
Ответы
Ответ 1
В стороне, мне удалось это исправить, и @PeterTheLobster подошел ближе.
Короче говоря, присоединяясь к слушателю 'click', мы затем e.preventDefault(); в форме, убедитесь, что наложение было отображено путем задержки отправки формы на 1 секунду.
function main_form_overlay() {
var form_outer = jQuery('.main-form'),
form = jQuery('.main-form form'),
html,
overlay;
html = '<div class="loading-overlay"><span class="text">Checking 77 Destinations, please Be Patient <i class="fa fa-circle-o-notch fa-spin"></i></span></div>';
form_outer.append(html);
overlay = jQuery('.main-form .loading-overlay');
jQuery('#gform_submit_button_2').on('click', function(event){
//Prevent the form from submitting
var e = event || window.event;
e.preventDefault();
console.log("In Here!");
if (!overlay.is(':visible')) {
overlay.show();
console.log("Show Overlay");
} else {
overlay.hide();
console.log("Hide Overlay");
}
//Submit the form now
window.setTimeout(function() {
form = jQuery('.main-form form');
form.submit();
},1000);
});
}
Ответ 2
Проверено в сафари/окнах и работает нормально. Я полагаю, что проблема была background: rgba(#999,0.9)
.
Вы можете проверить, меняя комментарии для этих строк в css-
/*background: rgba(#999, 0.9);*/
background: rgba(158,158,158,0.9);
Пожалуйста, обратитесь к fiddle.
Ответ 3
Из того, что я помню, Safari будет блокировать рисование, как только он начнет загружать страницу. Вы пытались предотвратить подачу, делаете свои вещи и просто отправляете?
Что-то вроде этого может работать:
function main_form_overlay() {
var form_outer = jQuery('.main-form'),
form = jQuery('.main-form form'),
html,
overlay;
html = '<div class="loading"><span class="text">Checking 77 Destinations, please Be Patient <i class="fa fa-circle-o-notch fa-spin"></i></span></div>';
form_outer.append(html);
overlay = jQuery('.main-form .loading');
form.on('submit', function(event){
//Prevent the form from submitting
var e = event || window.event;
e.preventDefault();
console.log("In Here!");
if (!overlay.is(':visible')) {
overlay.show();
console.log("Show Overlay");
} else {
overlay.hide();
console.log("Hide Overlay");
}
//Submit the form now
$(this).submit();
});
}
Ответ 4
Думаю, у тебя другая проблема. Вы уверены, что var overlay
находится в нужный момент, указывая на ваши элементы? Или это undefined?
Я думаю, что это не указывает на это.
Просто сделайте тест. Поместите <div class="loading">testmessage</div>
в свой html и просто добавьте/замените innerHtml на свою функцию.
В этом случае вы можете быть уверены, что overlay = jQuery('.main-form .loading');
действителен.