2011-12-19 36 views
1

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

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事件

请告诉我如何做到这一点。

预先感谢您

回答

0

将火onbeforeunload这如果btnSave帖子后面,它看起来好像是。因此,您有几个选择

  1. 防止btnSave回发,如果你不需要它。做到这一点最简单的方法是把这个属性在asp:Button代码

    的OnClientClick =“返回false”

  2. 线了一个Javascript/jQuery的方法来禁用onbeforeunload事件。我之前通过在隐藏字段中存储值并使用它来表示onbeforeunload事件应该触发。

例如

$('#<%= btnSave.ClientID %>').bind('click', function(e){ 

    $('#myHiddenFieldId').val('1'); 

}); 

和改变beforeunload处理您检查隐藏字段不等于1(使0默认即

window.onbeforeunload = function (evt) { 

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

} 

你也许可以做到通过使用jQuery在btnSave点击事件中解除绑定onbeforeunload处理程序,而不是使用隐藏字段进行覆盖,可以取得更好的效果。

选项2虽然可以很费劲 - 所以最好的运气