window.conf在FireFox中不起作用

window.confirm not working in FireFox

本文关键字:不起作用 FireFox conf window      更新时间:2023-09-26

背景:目标是防止用户使用退格键返回页面。除了一些输入字段之外,我已经创建了禁用键的代码。但如果他们真的想回去,我想在确认对话框中询问他们是否真的想回来。

问题:以下代码适用于IE和Chrome,但不适用于FF。确认会弹出,但仍会"返回"一页。这在IE/Chrome中不会发生,因为确认对话框会等待用户输入。

代码:

<script type="text/javascript">
    $(document).unbind('keydown').bind('keydown', function (event) {
        var doPrevent = false;
        if (event.keyCode === 8) {
            var d = event.srcElement || event.target;
            if ((d.tagName.toUpperCase() === 'INPUT' && 
                 (
                     d.type.toUpperCase() === 'TEXT' ||
                     d.type.toUpperCase() === 'PASSWORD' || 
                     d.type.toUpperCase() === 'FILE' || 
                     d.type.toUpperCase() === 'SEARCH' || 
                     d.type.toUpperCase() === 'EMAIL' || 
                     d.type.toUpperCase() === 'NUMBER' || 
                     d.type.toUpperCase() === 'DATE' )
                 ) || 
                 d.tagName.toUpperCase() === 'TEXTAREA') {

  doPrevent = d.readOnly || d.disabled;
        }
        else {
            var r = window.confirm("Leaving the page can cause data to be lost.  Are you sure?");
            if (!r) {
                doPrevent = true;
            }  
        }
    }
    if (doPrevent) {
        event.preventDefault();
        //event.stopPropagation(); 
    }
});
</script>

这修复了它,并在每个浏览器中工作(Safari也是):

   window.addEventListener("beforeunload", function (e) {
    var confirmationMessage = "Leaving the page can cause data to be lost.  Are you sure?";
    e.returnValue = confirmationMessage;     // Gecko and Trident
    return confirmationMessage;              // Gecko and WebKit
});