document.ActiveElement没有返回Safari

时间:2017-09-04 11:37:43

标签: jquery safari

在我写的网站上,需要在事情发生之前显示一些确认文本。我使用的解决方案在按钮单击时显示一个模态窗口,当窗口关闭时,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中对上述内容进行了测试,它完全按照我的预期运行 - 当模态窗口关闭时,用户只有在按下确定按钮时才会注销,点击其他地方会让你登录。

在使用Safari的Mac上,单击“确定”将不执行任何操作。查看控制台,问题似乎是$(document.activeElement)。在Windows浏览器中,这将返回单击的按钮,在Safari中,我将获得以<body>开头的整个网页。

在网上阅读似乎对Safari中的activeElement主题进行了一些(小)的讨论,但是如果很多人都在做类似的事情,那就没那么多了。我所看到的所有解决方案都不适用于我的情况。

有没有办法在Safari中获得点击按钮,或者有更好的方法来实现我在所有浏览器中可用的功能吗?

1 个答案:

答案 0 :(得分:3)

  

来自mdn:注意:在Mac上,不是文本输入元素的元素往往不会将焦点分配给它们。

因此,您可以从以下位置更改事件处理程序:

wJOfJdWGPMk

委托人:

$('#modalLogout').on('hide.bs.modal', function () {
    var activeElement = $(document.activeElement);

&#13;
&#13;
$('#modalLogout').on('click', '#LogoutOk', function (e) {
    var activeElement = $(e.target);
&#13;
$('#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;
});
&#13;
&#13;
&#13;