2010-03-09 9 views
0

DOM에 일치하는 객체가 생성 될 때 특정 클래스와 ID에 이벤트를 바인딩하고 싶습니다.DOM 요소 생성시 함수 실행

ASP UpdatePanel에 일부 jQuery 코드가 있는데, 부분 포스트 백에 DOM을 다시로드하게되므로이 작업을 수행하고 있습니다. live()를 사용하여 이벤트를 재설정했지만 엘리먼트가 생성 되 자마자 2 행 초기화 함수를 호출해야합니다.

이것을 live() 또는 다른 jQuery 함수에 첨부 할 수있는 방법이 있습니까? 아니면 직접 코드를 작성해야합니까?

감사합니다, 에드

답변

1

당신은 당신이라는 기능을 쓸 수 있습니다 어느 쪽 UpdatePanel 사용하는 경우 : 때마다 페이지를 처음로드라고하며이 된 UpdatePanel 내용을로드 할 때됩니다

function pageLoad() { } //Called by ASP.Net javascript code 

을, 첫 번째 PAG 실행되지 않습니다이

$(document).ready(function() { 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myFunction); 
}); 
function myFunction() { 
//Do stuff with elements 
} 

참고 : 또는 다른 당신은 UpdatePanel 다시 이렇게 때 실행하려는 모든 기능을 연결할 수 있습니다 e로드, UpdatePanel로드에서만. 로드시에도 실행하려면 document.ready에 myFunction();에 대한 호출을 추가하십시오.

+0

죄송합니다. 이는 페이지가 아닌 WebControl이기 때문에 페이지 자체에 코드를 추가하지 않아도된다는 것을 잊어 버렸습니다. 스크립트를 새로 고치는 방법을 알고 있습니다. postpan은 updatepanel에서 (비록 나는 당신의 후자의 옵션을 보지 못했지만), 그러나 이것은 내가 할 접근법이 아니다. 이상적으로이 코드는 종속성을 줄이기 위해 외부 메서드에 의존해서는 안됩니다. –

+0

@Ed - UpdatePanel이 필요한 장소에서이 작업을 수행합니다. 그러나 페이지에있을 필요는 없으며 외부 또는 등록 된 javascript 파일에서 사용할 수있는 두 번째 코드 세트만으로도 작동합니다. 'Sys.WebForms.PageRequestManager.getInstance()'가 null인지 확인하고,'.add_endRequest (myFunction);를 호출하지 않으면 UpdatePanel 또는 ScriptManager 존재 여부에 관계없이 작동합니다. 관심있는 정확한 이벤트에 대한 처리기를 등록하는 것만으로는 그보다 효율적이지 않습니다. –

+0

흠, 사실. Anurag의 솔루션보다 훨씬 효율적입니다. 시도해 보겠습니다. –

1

DOMNodeInserted 노드가 DOM에 추가 될 때마다 이벤트가 발생합니다. 문서 본문에서이 이벤트를 수신하게하고, 발사 될 때마다 삽입 된 노드에서 찾고있는 클래스 및 ID 선택기를 검색하십시오.

$(document.body).bind("DOMNodeInserted", function(event) { 
    // element is the newly inserted node 
    var element = $(event.target); 
    // if this element is of interest 
    if($("<selector>", element).length > 0) { 
     // run the initialization code here.. 
    } 
} 

DOM 돌연변이 이벤트 here에 대해 자세히 알아보십시오.

+0

나는 그것을 좋아하지만 얼마나 효과적일까요? –

+0

삽입 할 내용은 DOM 노드를 구성하기 위해 구문 분석됩니다. 그것은 피할 수없는 일입니다. jQuery의 선택기 엔진의 효율성에 대해 염려가된다면 DOM 삽입 빈도와 빈도를 고려해야한다. jQuery (http://mootools.net/slickspeed/)에 대한 이러한 테스트는 보통이 특정 페이지에 대해 내 컴퓨터에서 수 밀리 초 또는 두 번에 끝난다. - http://mootools.net/slickspeed/system/template.php?include= jquery.js & function = $ & nocache = 1268138473' .. 나는 정말 큽니다. 당신의 경우에는 그렇지 않을 수도 있습니다. – Anurag

+0

그러나 나는 이것이 모든 단일 노드 삽입에 대해 불려질 것이라는 것에 약간의 걱정이 있음을 이해합니다. 많은 호출이 추가 될 수 있습니다 (일부 페이지는이 제품 카탈로그에서 400 개 이상의 제품을 페이지에 사용하는 것입니다 , 모두 동적으로 바인딩됩니다). 1ms는 400 번 할 때 아직 많이 남아 있습니다 :) –