我正在为项目使用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事件

请告诉我该怎么做。

先感谢您

最佳答案

如果btnSave回传看起来像是这样,它将在onbeforeunload上触发。因此,您有两种选择


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

OnClientClick =“返回假”
连接javaScript / jQuery方法以禁用onbeforeunload事件。我之前通过在隐藏字段中存储一个值并使用此信号表示应触发onb​​eforeunload事件来完成此操作。


例如

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

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

});


并更改您的on beforeunload处理程序,以检查隐藏字段不等于1(将0设置为默认值,即

window.onbeforeunload = function (evt) {

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

}


通过使用JQuery而不是使用隐藏字段覆盖btnSave click事件中的onbeforeunload处理程序,您可能会做得更好。

选项2可以变的很好-祝您好运

08-07 11:09