window.confirm在FireFox中无法正常工作

时间:2015-11-06 14:31:29

标签: javascript jquery firefox

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

问题: 以下代码适用于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>

1 个答案:

答案 0 :(得分:0)

这修复了它并在每个浏览器中工作(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

});