在支付账单时,我会显示一个静态引导弹出窗口,告诉用户等待。用户单击调用js函数的按钮以显示弹出窗口,然后将用户重定向到在服务器端运行计费的URL。它适用于除Safari之外的所有浏览器。当我单击Safari中的按钮时,弹出窗口不会出现,它只是导航到结算页面。我注意到如果我删除导航线(location.replace('/ billingpage / pay /');)弹出窗口将在safari中正确显示。似乎如果javascript safari中有导航,则不会显示弹出窗口。
我还尝试将导航放在另一个函数中并在超时后调用它,如:window.setTimeout(navigate(),1000);但那也不起作用。
function pay_now() {
document.getElementById("paynow_btn").disabled=true;
document.getElementById("paynow_btn").style.opacity = 0.25;
var wait_title = "Please wait while the transaction is processed...";
var wait_message = "<br/><br/><br/><br/> ";
document.getElementById("staticModalLabel").innerHTML = wait_title;
document.getElementById("staticModalBody").innerHTML = wait_message;
var spinner = new Spinner().spin();
document.getElementById("staticModalBody").appendChild(spinner.el);
$('#staticPopupModal').modal({
backdrop: 'static',
keyboard: false
});
location.replace('/billingpage/pay/');
}
<a href="javascript:pay_now();" id="paynow_btn" class="btn btn-green">PAY</a>
答案 0 :(得分:0)
不应该是每个javascript进程的预期行为吗? 无论如何,在你的情况下,我肯定会推迟jquery和承诺。这是我用jqueryui进行模态对话的fiddle。
基本上它在代码中就是这样。
var dfd = $.Deferred();
$("#dialog-confirm").dialog({
resizable: false,
height: 140,
modal: true,
buttons: {
"go to billing page": function () {
$(this).dialog("close");
dfd.resolve();
},
Cancel: function () {
$(this).dialog("close");
dfd.reject();
}
}
});
$.when(dfd).then(
function () {
alert('go to billing page');
},
function () {
alert('nope');
});