gpt4 book ai didi

javascript - Telerik RadTextBox ValueChanged 事件和 window.onbeforeunload

转载 作者:行者123 更新时间:2023-11-28 10:05:14 29 4
gpt4 key购买 nike

我的页面上有以下 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)。

我做错了什么吗?或者有针对我的情况的解决方法吗?

最佳答案

在我的例子中,唯一的解决方法似乎是使用 KeyPress 事件和过滤系统键(Tab、Enter 等)

    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)));
}

关于javascript - Telerik RadTextBox ValueChanged 事件和 window.onbeforeunload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505422/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com