如何使用jQuery在beforeunload事件中找到sender对象?

时间:2012-02-21 08:15:55

标签: jquery jquery-selectors

我有一个要求,即用户从页面导航而不保存数据,他需要提示警告消息说他没有保存数据。我的页面中有两个链接1. Yahoo和2. Process。当用户点击Yahoo时,需要提示他,但是当用户点击Process时,他不需要提示警告。

下面是一段代码。

<html>
<head runat="server">
<title></title>
<script src="http://localhost/HLC/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
    var hasChanged = false;
    $(window).bind("beforeunload", function (e) {
        if (hasChanged) {
            return "Want to close with out saving data?";
        }
    });

    $(document).ready(function () {
        $(':input', document.myForm).bind("change", function () {
            hasChanged = true;
        });
    });
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
    Name:
    <asp:TextBox runat="server" ID="txtName" />
    <br />
    <a id="redirect" href="http://www.yahoo.com">Click for yahoo.</a>
    <asp:Button ID="process" Text="Process" runat="server" />
</div>
</form>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

在函数

中使用它
    if ($(e.target).attr('id')=="redirect") {
        e.preventDefault();
        alert("Want to close with out saving data ?");
    }

答案 1 :(得分:0)

您无法检查触发beforeunload事件的内容,因为其目标设置为document。 但您可以使用一些标志来决定是否应该显示确认信息:

var hasChanged = false;
var ask = true;

$(window).bind("beforeunload", function (e) {
    if (hasChanged && ask) {
        return "Want to close with out saving data?";
    }
    ask = true; // depending on your processing handling you may want to reset this flag
});

$(document).ready(function () {
    // bind handler to turn off asking on button click
    $('#process').click(function () {
        ask = false;
    });  

    $(':input', document.myForm).bind("change", function () {
        hasChanged = true;
    });
});