2011-12-14 79 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變量在onbeforeunload處理程序中具有不正確的值(false)。

我做錯了什麼或者是否有解決方案?

回答

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))); 
    } 
相關問題