Telerik RadTextBox ValueChanged событие и window.onbeforeunload - PullRequest
1 голос
/ 14 декабря 2011

У меня на странице есть следующий 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 срабатывает перед изменением onvalue, а переменная isDirty имеет неверное значение (false) в обработчике onbeforeunload.

Я что-то не так делаю или есть обходной путь для моего дела?

1 Ответ

0 голосов
/ 21 декабря 2011

Похоже, что единственным обходным решением в моем случае является использование события 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)));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...