2014-10-08 49 views
1

如何在特定按钮上设置Onbeforeunload函数? 例如,我有3个按钮。允许在ASP.NET Framework上的特定按钮上使用Javascript Onbeforeunload函数

<div> 
    <asp:Button ID="btnBack" runat="server" Text="Back" CssClass="po-font" Height="30px"/> 
    <asp:Button ID="btnSumbit" runat="server" Text="Submit" CssClass="po-font" Height="30px"/> 
    <asp:Button ID="btnSaveToDraft" runat="server" Text="Save To Draft" CssClass="po-font" Height="30px"/> 
</div> 

于JavaScript,我不喜欢的东西:

<script type="text/javascript"> 
    window.onbeforeunload = confirmExit; 
    function confirmExit() 
    { 
    return "Are you sure you want to leave this page? Any unsaved progress will be lost"; 
    } 
</script> 

功能将正常工作,虽然,但我想可能是指定的“后退”按钮,在一个特定的按钮的功能。我做了类似的事情。

<script type="text/javascript"> 
    function confirmExit() 
    { 
    return "Are you sure you want to leave this page? Any unsaved progress will be lost"; 
    } 

$('#btnBack').live('click', function() { 
    window.onbeforeunload = confirmExit; 
}); 

</script> 

但是Id不起作用。这个怎么做?有任何想法吗?我只想触发指定按钮上的功能。帮我。

+0

它是如何工作的? – artm 2014-10-08 05:21:42

+0

我只想在“返回”按钮上应用该功能。不在两个按钮上(btnSumbit,btnSaveToDraft)。我使用了上面的语法,但它不起作用。或者我应该使用更好的功能? – Jarich 2014-10-08 05:26:11

回答

0

首先不太可能出现ID是正确的,因为ASP.NET会将容器的ID作为该容器的前缀,如果该对象。要么给btnBack一个类,并使用或:

$("[id$='btnBack']").on("click",...) 

我会战斗测试版的编辑,当我在电脑前,我回来

*编辑添加战测试代码*

所以你需要将卸载事件绑定到window,你不能像Kevin在他的回答中说的那样给它分配一个函数。如果你只希望它为一个特定的按钮触发,下面的代码是我在主动生产中使用的东西(它有更多的检查,并检查是否有任何内容在更改之前在页面上更改等),所以应该为你工作:

if (self == top) { // Check we're not in an iFrame or colorbox 
    $(window).bind("beforeunload", function (event) { // bind the window unload event 
     if (backLinkClicked) { // Check if the back link has been clicked, if so prompt 
      return "Are you sure you want to leave this page? Any unsaved progress will be lost"; 
     }; 
    }); 
} 

那么你click处理程序:

var backLinkClicked = false; 
$("[id$='btnBack']").click(function() { backLinkClicked = true }); 

所以你后退按钮单击处理程序只是改变变量火上卸载的提示。

0

使用$('<%=btnBack.ClientID%>').click(function(){...});因为asp.net自己的客户端与控件ID和HTML呈现的ID前缀可能看起来像ct100 $ btnBack。

0

首先,你应该明白,onbeforeunload是一个事件,并通过把:

window.onbeforeunload = confirmExit; 

要附加一个事件处理窗口,这将是全球性的。

如果我是正确的,当用户尝试通过单击按钮导航时,您需要的是打开确认对话框。我建议你试试这个:

$('#<%=btnBack.ClientID%>').on('click', function (e) { 
    // check if user clicked cancel 
    if (!confirm("Are you sure [...]") { 
     e.stopImmediatePropagation(); 
     e.preventDefault(); 
     return false; 
    } 
}); 

这样,当用户点击这个按钮,会出现一个确认对话框(confirm())。如果用户点击取消,代码调用stopImmediatePropagation()(应该防止运行其他JS事件处理程序)和preventDefault()(按钮被点击时禁用默认动作,例如,提交表格)。

我还没有测试过自己,但我想它应该工作。

相关问题