2009-06-30 4 views
0

UpdatePanels를 사용하여 ASP.NET 아약스 포스트 백을 수행하는 페이지가 있습니다. 일부 자바 스크립트에서는 window.onload 이벤트에 몇 가지 객체를 설정했습니다. 다시 게시 할 때 내 개체가 엉망이 된 것 같습니다.아약스가 내 자바 스크립트 개체를 깨는 건가요?

테이블에서 이벤트를 수신하는 하나의 오브젝트는 더 이상 이벤트를 수신하지 않습니다. 또한 버튼에 대한 로컬 참조가있는 객체가 해당 객체를 업데이트 할 수없는 경우도있었습니다. 내가 다시 게시 할 후에 나는 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'; 
    } 
} 

: 여기에 엉망지고 있었다 자바 스크립트 버튼입니다.

어떤 통찰력이라도 있습니까?

답변

2

this 키워드 (특수 변수)는 어떤 함수가이를 호출하는지에 따라 변경됩니다. 기본적으로 범위 문제입니다. 당신은 ajax 응답에서 호출되고있는 함수를 클로저하거나, 또는이 필요합니다. 또는 당신이하고있는 일 (당신이 싫어하는 것)을 수행하십시오.

클로저를 쓰는 것이 "올바른 방법"입니다.

this 변수가 양식 입력 이벤트에 따라 범위를 변경하는 방식에 익숙 할 수도 있습니다. 텍스트 상자의 경우 onblur 이벤트를 사용하면 this은 방금 포커스를 잃은 텍스트 영역을 나타냅니다.

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

This is also another good resource.

(내가 복사하고 여기에있는 예제를 붙여 넣을 수 있습니다 확신 해요,하지만 중복 것)

관련 문제