阻止ddl在执行OnSelectedIndexChanged事件时触发未保存的更改警告
Prevent ddl from triggering unsaved changes warning while still executing OnSelectedIndexChanged event
我使用这个jquery代码来检测未保存的更改,并在用户导航离开之前警告他们。
var _changesMade = false;
$(document).ready(function () {
$('form').bind($.browser.msie ? 'propertychange' : 'change', function () {
_changesMade = true;
});
$(window).bind('beforeunload', function () {
if (_changesMade)
return 'There are unsaved changes which will be lost if you continue.';
});
});
它工作得很好,除了在我有级联下拉列表的页面上。我将此代码添加到asp:DropDownList控件
onChange = "_changesMade=false; return false;"
它停止了警告,但也停止了OnSelectedIndexChanged服务器代码的执行,所以现在第二个下拉列表中没有填充正确的数据。当下拉列表更改时,我如何防止弹出并仍然执行服务器代码?
问题是级联下拉列表中的return false。这将阻止SelectedIndexChanged被激发,因此您需要一个不使用它的解决方案。
在不想参与更改跟踪的控件上打一个标记,比如级联下拉列表中的父控件,怎么样。我可能会想使用一个类,比如notrack
(任意名称),它可以弹出到我不想跟踪的任何控件上。
您的跟踪绑定将变成
$(':input').not('.notrack').bind($.browser.msie ? 'propertychange' : 'change', function ()
{
_changesMade = true;
});
这意味着您不会使用
onChange = "_changesMade=false; return false;"
在这种情况下,返回false导致了问题,这就是需要进行的原因
顺便说一句,我认为您不需要对绑定进行任何特定的浏览器检查。JQuery将考虑到这一点。我相信下面的代码应该足够
$(':input').not('.notrack').bind('change', function ()
{
_changesMade = true;
});
偶尔,如果您需要在回发之间跟踪_changesMade
标志(根据您的描述,可能会这样),那么可以考虑将值存储在隐藏字段中。如果您将隐藏字段设为runat="server"
,那么您也可以通过服务器端代码对此进行操作,这可能会有所帮助。
编辑:
这与您的预期略有不同。这将跟踪每个表单元素的更改,并将表单标记为已更改(如果有任何更改)。这就是我过去让这种事情发生的原因。我认为在这种情况下,将表单作为一个整体进行跟踪是不可行的,因为您需要排除某些字段。我也会使用一个隐藏字段来跟踪您的更改。
我不知道这是否是最好的答案,但它可以帮助你。你可以这样试试。
删除ASPX
中的OnSelectedIndexChanged
在aspx.cs的PageLoad
方法中,请尝试此
protected void Page_Load(object sender, EventArgs e)
{
this.YourDropDownList.Attributes.Add("onchange", "javascript:_changesMade=false; __doPostBack('" + YourDropDownList.ClientId +"','');";
}
这里有一个关于如何使用ASP.net框架自动生成的__doPostBack
方法的参考。
希望它能帮助你。
- chrome扩展更改主机/域警告
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何将多个画布保存为一个图像
- 如何关闭警告此表单上有未保存的更改的消息
- 在AJAX调用期间替换表单时,警告用户未保存的表单更改
- 阻止ddl在执行OnSelectedIndexChanged事件时触发未保存的更改警告
- 当警告用户他们正在留下未保存数据的表单时,停止带有提交按钮的回发
- 如何使用Jquery保存数据后显示警告消息
- 是否有任何方法可以让mocha.js html报告器显示的错误信息保存到变量并警告到其他php文件
- '在关闭或离开未保存更改的页面之前警告用户'并# 39;t工作
- 为什么chrome显示弹出警告:;您所做的更改可能尚未保存"在每个页面出口
- jQuery警告卸载,除非保存按钮被点击
- 如何查看任何字段的值是否已更改,警告用户未保存的更改
- 在离开未保存更改的网页之前警告用户
- 当从未保存更改的页面导航时警告用户