2011-12-14 2 views
1

У меня есть следующие JavaScript на моей странице:Telerik RadTextBox ValueChanged событие и window.onbeforeunload

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 переменной имеет неправильное значение (false) в onbeforeforeload.

Я делаю что-то неправильно или есть обходное решение для моего дела?

ответ

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))); 
    } 
Смежные вопросы