2009-06-30 4 views
0

私はUpdatePanelsを使ってASP.NET ajaxポストバックを行うページを持っています。いくつかのjavascriptでは、window.onloadイベントでいくつかのオブジェクトを設定しています。これは素晴らしい動作です。私はポストバックをするとき、私のオブジェクトが台無しにされているようです。ajaxはjavascriptオブジェクトを壊していますか?

テーブルからイベントを受信して​​いた1つのオブジェクトは、もはやイベントを受信しません。また、ボタンのローカル参照を持つオブジェクトがそれらを更新することができない場合もありました。私がポストバックを行った後、私はGoDirty()関数で行ったように私はそれらをリセットしない限り、ボタンの参照が台無しにされている

function EditItemPage(clientId) 
{ 
    this.saveButton = $get(clientId + ""_{2}"") 
    this.publishButton = $get(clientId + ""_{3}"") 
    this.exitButton = $get(clientId + ""_{4}"") 

    EditItemPage.prototype.GoDirty = function() 
    { 
     //it works if i add these, but i'd rather not have to. 
     this.saveButton = $get(clientId + ""_{2}"") 
     this.publishButton = $get(clientId + ""_{3}"") 
     this.exitButton = $get(clientId + ""_{4}"") 

     this.saveButton.disabled = false; 
     this.publishButton.value = 'Save and Publish'; 
     this.exitButton.value = 'Discard changes and Exit'; 
    } 
} 

:ここではそれが台無しになったjavascriptのボタンがあります。

洞察?

答えて

2

thisキーワード(特殊変数)は、どの関数がそれを呼び出すかに基づいて変更されます。基本的には、それは範囲の問題です。 またはのグローバルスコープに、またはに必要なものを入れます(あなたは好きではありません)。

クロージャを書くことは「正しい」方法です。

this変数がフォーム入力のイベントに基づいてスコープを変更する方法に精通している場合があります。テキストボックスの場合、onblurイベントを使用すると、thisはフォーカスを失ったテキストエリアを参照します。

See this question for an example of how to do the closure.

This is also another good resource.

(私はあなたのためにここでの例をコピーして貼り付けることができ確信しているが、それは冗長なようだ)

関連する問題