2011-12-14 4 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

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))); 
    } 
(タブなどを入力してください)私の場合は唯一の回避策は、KeyPressイベントとフィルタリングシステムキーの使用であることのように思えます
関連する問題