在网站上,我正在编写,需要在发生某些问题之前显示一些确认文本。我正在使用的解决方案在按钮上显示一个模态窗口,当窗口关闭时,jQuery查看了哪个按钮。
所以我有以下注销确认
$(function () {
$('#logOut').on('click', function () {
url = $(this).data('request-url');
$('#modalLogout').modal('show');
});
$('#modalLogout').on('hide.bs.modal', function () {
var activeElement = $(document.activeElement);
if (activeElement.is('[data-toggle], [data-dismiss]')) {
if (activeElement[0].id === "LogoutOk") {
window.location.href = url;
}
}
});
});
和模式窗口
<div id="modalLogout" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-body">
<p>Do you want to log out?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" id="LogoutCancel">Cancel</button>
<button type="button" class="btn btn-warning" data-dismiss="modal" id="LogoutOk">OK</button>
</div>
</div>
</div>
</div>
在Windows中,我已经在IE,Edge,Firefox和Chrome中测试了上述内容,并且所有这些都可以正常工作 - 当模态窗口关闭时,仅在按下OK按钮时将用户登录时,请单击其他任何地方,请单击会让您登录。
在Mac上使用Safari,单击OK将无能为力。查看控制台,问题似乎是$(document.activeElement)
。在Windows浏览器中,这将返回单击的按钮,在Safari中,我从<body>
开始获取整个网页。
在网上阅读,似乎在野生动物园中就积极元素的主题进行了一小段讨论,但如果很多人在做类似的事情,我期望的不如我期望的那样。我看过的解决方案都不适用于我的情况。
有没有办法在Safari中获取单击按钮,或者有更好的方法可以在所有浏览器中使用我之后的工作?
来自MDN:注意:在Mac上,不是文本输入元素的元素往往不会将焦点分配给它们。
因此,您可以从:
更改活动处理程序$('#modalLogout').on('hide.bs.modal', function () {
var activeElement = $(document.activeElement);
委派一个:
$('#modalLogout').on('click', '#LogoutOk', function (e) {
var activeElement = $(e.target);
$('#logOut').on('click', function () {
url = $(this).data('request-url');
$('#modalLogout').modal('show');
});
$('#modalLogout').on('click', '#LogoutOk', function (e) {
console.log('LogoutOk: ' + url);
window.location.href = url;
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<button type="button" class="btn btn-primary btn-lg" id="logOut" data-request-url="http://www.google.it">
Launch demo modal
</button>
<div id="modalLogout" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-body">
<p>Do you want to log out?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" id="LogoutCancel">Cancel</button>
<button type="button" class="btn btn-warning" data-dismiss="modal" id="LogoutOk">OK</button>
</div>
</div>
</div>
</div>