我的页面上有以下javascript:
var isDirty = false;
function OnTextBoxValueChanged(sender, args)
{
isDirty = true;
}
window.onbeforeunload = function ()
{
if (isDirty)
{
return 'You have unsaved changes on the form.';
}
}
OnTextBoxValueChanged是RadTextBox相应客户端事件的处理程序。
如果用户更改文本框中的文本,然后将焦点移动到任何其他元素,然后按下浏览器中的“关闭标签” - 将出现确认窗口。这是对的。但是当用户更改文本然后立即按下“关闭选项卡”时会出现问题。在这种情况下onbeforeunload事件在onvaluechanged之前触发,而isDirty变量在onbeforeunload处理程序中具有不正确的值(false)。
我做错了什么或者我的案例有解决办法吗?
答案 0 :(得分:0)
在我的情况下,似乎唯一的解决方法是使用KeyPress事件和过滤系统密钥(选项卡,输入等)。
function OnKeyPress(sender, args)
{
if (!IsSysKey(sender, args))
{
isDirty = true;
}
}
function IsSysKey(sender, args)
{
var kc = args.get_keyCode();
return ((kc == 9) || (kc == 13) || (kc == 19) || (kc == 27) ||
(kc == 45) ||
(kc >= 33 && kc <= 40) ||
(kc >= 91 && kc <= 93) ||
(kc >= 112 && kc <= 123) ||
((kc == 8) && (sender.get_caretPosition() == 0) &&
(sender.get_caretPosition()[1] == undefined)) ||
((kc == 46) && (sender.get_caretPosition() == sender.get_value().length) &&
(sender.get_caretPosition()[1] == undefined)));
}