使用Telerik控件在Javascript中退出确认

时间:2011-12-19 19:02:55

标签: javascript asp.net telerik onbeforeunload confirm

我正在为我的项目使用Telerik控件。在我的页面上,有一些指向另一个页面的链接,几个radtextbox和一个radbutton(它会导致回发)。更改文本框值后,该按钮将变为启用状态。然后,在我的window.onbeforeunload中,检查按钮是启用还是禁用。如果已启用,则会出现确认对话框。代码如下所示:

window.onbeforeunload = function (evt) {
    var ClientGeneral_btnSave = $find('<%=btnSave.ClientID %>');
    if (ClientGeneral_btnSave.get_enabled() == true) {
    var message = 'You will lose unsaved data?';
    if (typeof evt == 'undefined') {
       evt = window.event;
    }
    if (evt) {
       evt.returnValue = message;
    }
    return message;
}

此代码效果很好。当我关闭选项卡时,会出现确认对话框。当我点击链接时,确实如此。但是,当我点击btnSave本身时,对话框也会出现,这是不正常的。我希望btnSave不会导致onbeforeunload事件

请告诉我怎么做。

提前谢谢

1 个答案:

答案 0 :(得分:0)

如果btnSave回复它看起来好像是它,它会触发onb​​eforeunload。因此,您有几个选择

  1. 如果您不需要,请阻止btnSave回发。最简单的方法是将此属性放在asp:Button标记

    OnClientClick =“return false”

  2. 连接javaScript / jQuery方法以禁用onbeforeunload事件。之前我通过在隐藏字段中存储一个值并使用它来表示onbeforeunload事件应该触发来执行此操作。

  3. 例如

    $('#<%= btnSave.ClientID %>').bind('click', function(e){
    
       $('#myHiddenFieldId').val('1');
    
    });
    

    并更改你的on beforeload handler以检查隐藏字段是否不等于1(默认值为0,即

    window.onbeforeunload = function (evt) { 
    
       if( $('#myHiddenFieldId').val() != '1')
       {
          //your logic here
       }
    
    }
    

    你可以通过使用JQuery解除btnSave点击事件中的onbeforeunload处理程序而不是使用隐藏字段来覆盖来做更好的事情。

    选项2可能会变得很繁琐 - 祝你好运