2012-08-03 5 views
5

그래서 내가 updatepanel가 업데이트 된 후 일부 자바 스크립트 함수를 실행하려면로드, 그래서 나는이되어 위의 코드와왜 함수가 실행 않는 여러 번이

function pageLoad() { 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(panelLoaded); 
} 


function panelLoaded(sender, args) { 
     alert("foobar"); 
} 

, 내가 패널 하나를 업데이트하는 경우 시간, "foobar"한 번 경고합니다; 패널을 두 번째로 업데이트하면 "foobar"가 두 번 팝업됩니다. 세 번째로 업데이트 할 패널을 트리거하면 "foobar"가 세 번 튀어 나오고 ... 네 번째 시간이 네 번 나타나면 ... 등등 ...

원인은 무엇입니까 ?? pageLoad뿐만 아니라 updatepanel 포스트 백 동안 실행되기 때문에

감사합니다 ~~~

+1

lprm.add_pageLoaded (panelLoaded) l에서 반복하여 추가하는 것처럼 보입니다. 아마 prm에서 삭제되지 않고 페이지를 반복 할 때마다 새 인스턴스가 추가됩니다. 거기에 중단 점을 설정하고 prm에있는 panelLoaded 호출의 수를 확인하십시오. prm에는 remove_pageLoaded()가 있습니다. 선택권? – Sam

+0

감사합니다. 바로 그 자리에 있습니다. Sys.WebForms.PageRequestManager.getInstance(). remove_pageLoaded (panelLoaded); – eastboundr

+0

도와 줘서 기쁩니다! 나머지 프로젝트와 함께 행운을 빈다. – Sam

답변

1

감사합니다. 문제는 샘이 언급 한 것처럼 너무 많은 prm 인스턴스가있는 것 같습니다. 나는 Sys.WebForms.PageRequestManager.getInstance()를 추가했다. remove_pageLoaded (panelLoaded); 경고() 후 모든 것이 좋습니다.

3

이다. 문제의 해결책은 간단합니다.

function pageLoad(sender, eventArgs) { 
    // If this is being executed by ajax 
    if (eventArgs) { 
     // And this is only a partial load 
     if (eventArgs.get_isPartialLoad()) { 
      // Don't perform any further processing 
      return; 
     } 
    } 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoaded(panelLoaded); 
} 
0

이 현상이 발생합니다. pageLoad은 기본적으로 Application.InitPageRequestManager.EndRequest의 조합으로 작동합니다. 이는 애플리케이션 초기화 (약 DOM 준비) 및 각 애플리케이션에 적용된다는 것을 의미합니다. Partial PostBack

페이지로드는 모든 포스트 백에서 작동합니다. 전체 및 부분.

이제 모든 부분적인 포스트 백에서 ScriptManager의 인스턴스에서 pageLoaded 이벤트를 다시 바인딩하고 있습니다.이 문제는 다시 발생합니다.

관련 문제