繁体   English   中英

如何防止单击电话号码时触发“ onbeforeunload”?

[英]How to prevent “onbeforeunload” from firing when clicking a telephone number?

我有一个响应式Web应用程序,我希望用户能够单击电话号码对其进行拨号。

此外,在页面加载过程中,我想显示"Please wait while loading..."

要获取"Please wait while loading..."以在页面加载时显示,我具有以下javascript代码

$(function () {

  // #Waiting is visible by default, when the page finish loading, hide the loading
  $("#Waiting").fadeOut(500);

    window.onbeforeunload = function () {
      // When a user navigates away, show the loading
      $("#Waiting").fadeIn(500);
    };
});

从上面的代码中,您会注意到默认情况下“加载”页面是可见的。 页面加载完成后,我将其淡出。 此外,当页面卸载时,我将显示“正在加载”页面,直到重定向用户为止。

直到用户单击“单击呼叫”按钮,以上代码才能正常工作。 当前,当用户单击“单击通话”按钮时,“加载”页面显示出来,并且永远不会消失。

由于“点击通话”实际上并未使用户离开页面,因此我想防止触发onbeforeunload事件,该事件阻止显示“正在加载”页面!

这是我的HTML标记

<body>

     <div id="Waiting">Please wait while loading...</div>

     <a href="tel:+1-800-123-4567" class="btn btn-lg btn-danger btn-block click-to-call">
         <strong>Call Now</strong>
     </a>

</body>

单击单击通话按钮时,如何防止onbeforeunload触发?

看来您可以访问引起onbeforeunloadevent.target.activeElement触发的元素

您应该能够将onbeforeunload处理程序编辑为以下内容。

window.onbeforeunload = function (event) {

    if (event && event.target && event.target.activeElement && event.target.activeElement.tagName.toLowerCase() === 'a' && event.target.activeElement.href.indexOf('tel:') > -1) {

        return;
    }

    // When a user navigates away, show the loading
    $("#Waiting").fadeIn(500);
};

上面的代码评估活动元素。 如果active元素是带有包含tel:href的链接,则我们不执行任何操作或不显示Waiting元素。

这就是我用来实现该功能的方式。 仅当单击例外元素(在您的情况下,此电话链接)时,我才更改有效值。

var valid = false;
window.onbeforeunload = function() {
    return valid?undefined:"";
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM