4

我有一个简单的 html 表单,里面的字段很少。

我想确保用户在尝试离开页面时收到警报消息。所以我在页面上添加了脚本,当用户试图离开这个页面时,它就会运行。

但是当用户尝试提交表单时,我也会收到此警报消息。当用户保存表单时,我不想要此警报消息。

请帮忙。

下面是一些示例代码。

<html>
    <head>

    <script>
        function verifyexit() { return 'Are you sure ?'; }           window.onbeforeunload = verifyexit;
    </script>       
</head>
<body>
        Go to <a href="b.html"> another page </a> 
        <form action="c.html">
            name : <input type="text" name="name" value=""/> <br>
            email : <input type="text" name="email" value=""/> <br>
            <input type="submit" value="save"/>
        </form>
</body> 

4

4 回答 4

7

堆栈溢出参考

打开它:

window.onbeforeunload = "Are you sure you want to leave?";

要关闭它:

window.onbeforeunload = null;

请记住,这不是一个正常的事件 - 您不能以标准方式绑定到它。

检查值?这取决于您的验证框架。

在 jQuery 中,这可能类似于(非常基本的示例):

$('input').change(function() {
    if( $(this).val() != "" )
        window.onbeforeunload = "Are you sure you want to leave?";
});

使用 JQuery,这些东西很容易做到。因为你可以绑定到集合。

仅执行 onbeforeunload 是不够的,如果有人开始编辑内容,您只想触发导航离开。

要在 Chrome 和 Safari 中进行这项工作,您必须这样做

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

    var msg = "Sure you want to leave?";

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

    // For Safari
    return msg;
};


这是参考的一般规则

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

  // For IE<8 and Firefox prior to version 4
  if (e) {
    e.returnValue = 'Any string';
  }

  // For Chrome, Safari, IE8+ and Opera 12+
  return 'Any string';
};

参考:https://developer.mozilla.org/en/DOM/window.onbeforeunload

于 2012-06-25T04:59:01.887 回答
1

试试这个:

<form action="c.html" onsubmit="window.onbeforeunload=function(){}">
于 2012-06-25T04:59:11.930 回答
1

试试这个:

$(window).bind("beforeUnload", verify);
$("form").submit(function (){
    $(window).unbind("beforeUnload");
};
于 2012-09-29T04:13:39.117 回答
0

试试这个:http ://cfsilence.com/blog/client/index.cfm/2009/10/12/jQuery-Method-To-Prompt-A-User-To-Save-Changes-Before-Leaving-Page

我在函数中添加了一点:

 $('#submitButton').click(function () {
        isDirty = false;
});

只是这样表格在您要提交时不会要求验证:)

我希望这有帮助

注意:如果您不喜欢依赖通用命名,您也可以执行类似 $("input[type=submit]") 的操作(否则您的提交按钮需要称为 submitButton)

于 2012-06-25T06:13:14.353 回答