关闭标签/浏览器之前的确认

时间:2012-04-25 07:38:59

标签: javascript html

如何在用户离开页面之前询问用户确认?

我在不同的地方搜索过这个问题,但他们提到的只是使用javascript window.unload & window.onbeforeunload 。此外,由于它被阻止,它在大多数时候都不起作用。

7 个答案:

答案 0 :(得分:94)

试试这个:

<script>
window.onbeforeunload = function (e) {
    e = e || window.event;

    // For IE and Firefox prior to version 4
    if (e) {
        e.returnValue = 'Sure?';
    }

    // For Safari
    return 'Sure?';
};
</script>

这是一个有效的jsFiddle

答案 1 :(得分:8)

试试这个:

<script>
    window.onbeforeunload = function(e) {
       return 'Dialog text here.';
    };
</script>

此处有更多信息MDN

答案 2 :(得分:4)

2020年最短的解决方案(针对那些不需要支持IE的快乐人)

在Chrome,Firefox,Safari中进行了测试。

function onBeforeUnload(e) {
    if (thereAreUnsavedChanges()) {
        e.preventDefault();
        e.returnValue = '';
        return;
    }

    delete e['returnValue'];
}

window.addEventListener('beforeunload', onBeforeUnload);

实际上,没有一种现代浏览器(Chrome,Firefox,Safari)向用户显示“返回值”。相反,他们显示自己的确认文本(取决于浏览器)。但是我们仍然需要返回一些(甚至为空)字符串,以在Chrome上触发该确认。

有关MDN herehere的更多说明,请参见。

答案 3 :(得分:2)

我在答案集上阅读的评论为好的。大多数用户都要求允许按钮和一些链接点击。此处还有一行将添加到现有代码中。

<script type="text/javascript">
  var hook = true;
  window.onbeforeunload = function() {
    if (hook) {

      return "Did you save your stuff?"
    }
  }
  function unhook() {
    hook=false;
  }

调用unhook()onClick for按钮和要允许的链接。 E.g。

<a href="#" onClick="unhook()">This link will allow navigation</a>

答案 4 :(得分:2)

简单

function goodbye(e) {
        if(!e) e = window.event;
        //e.cancelBubble is supported by IE - this will kill the bubbling process.
        e.cancelBubble = true;
        e.returnValue = 'You sure you want to leave?'; //This is displayed on the dialog

        //e.stopPropagation works in Firefox.
        if (e.stopPropagation) {
            e.stopPropagation();
            e.preventDefault();
        }
    }
window.onbeforeunload=goodbye;

答案 5 :(得分:0)

如果要根据条件询问:

var ask = true
window.onbeforeunload = function (e) {
    if(!ask) return null
    e = e || window.event;
    //old browsers
    if (e) {e.returnValue = 'Sure?';}
    //safari, chrome(chrome ignores text)
    return 'Sure?';
};

答案 6 :(得分:0)

  1. 假设如果没有选择任何内容,我想关闭一个窗口
  2. 我想关闭窗口并选择某些内容但不提示我。
  3. 我想关闭一个窗口,但选择了某些东西,请提示我。

对于这三个条件,我在以下代码中进行了大量搜索,根据我的需要进行了更改,希望对其他人有所帮助。 如果我想弹出提示“true”,ask 是一个关键,否则会提示您关闭窗口。假设我想打印我的文档并重定向我的页面,询问将是假的,并且不会有提示。 假设您的页面有数据,然后检查条件是我的情况,如果小计为零,则没有提示,否则会提示我您的页面中有内容。

<pre>
    var ask = true;
    window.onbeforeunload = function(e) {
       if (!ask) return null
       var subtotal = $('#lblgtwithsgst').text();
         if (subtotal != '0') {
          e = e || window.event;
          //old browsers
            if (e) {
             e.returnValue = 'Sure?';
            }
            //safari, chrome(chrome ignores text)
            return 'Sure?';
         }  
      }
      $('#btnPrint').click(function(){
        ask = false;
        ///print your doc no prompt if ask is false;
      )};