在我正在编写的网站中,需要在某些事情发生之前显示一些确认文本。我使用的解决方案在按钮单击时显示一个模态窗口,当窗口关闭时,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;
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
和模态窗口
<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>
Run Code Online (Sandbox Code Playgroud)
在 Windows 中,我已经在 IE、Edge、Firefox 和 Chrome 中测试了上述内容,并且一切都按我的预期工作 - 当模式窗口关闭时,只有按下 OK 按钮,用户才会注销,点击其他任何地方都会离开你登录。
在使用 Safari 的 Mac 上,单击“确定”不会执行任何操作。查看控制台,问题似乎出在$(document.activeElement). 在 Windows 浏览器中,这将返回被点击的按钮,在 Safari 中,我得到整个网页以<body>.
在网上阅读似乎对 Safari 中的 activeElement 主题进行了(少量)讨论,但如果很多人都在做类似的事情,则没有我预期的那么多。我看过的所有解决方案都不适用于我的情况。
有没有办法在 Safari 中获得点击的按钮,或者有没有更好的方法来实现我在所有浏览器中都可以使用的功能?
来自mdn:注意:在 Mac 上,不是文本输入元素的元素往往不会获得焦点。
因此,您可以从以下位置更改事件处理程序:
$('#modalLogout').on('hide.bs.modal', function () {
var activeElement = $(document.activeElement);
Run Code Online (Sandbox Code Playgroud)
给委托人:
$('#modalLogout').on('click', '#LogoutOk', function (e) {
var activeElement = $(e.target);
Run Code Online (Sandbox Code Playgroud)
$('#modalLogout').on('hide.bs.modal', function () {
var activeElement = $(document.activeElement);
Run Code Online (Sandbox Code Playgroud)
$('#modalLogout').on('click', '#LogoutOk', function (e) {
var activeElement = $(e.target);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5562 次 |
| 最近记录: |