2010-12-19 6 views
1

jquery 및 ajax를 사용하고 있습니다.jquery 및 ajax 문제

$("[id^=apple]").click(function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
}); 

:

나는이 같은 일부 jQuery 코드를 가지고, ID = "사과-45"와 ...

를 ID = "사과-23"와 같은 ID를 가진 일부 div의이 코드는이 div에 적합합니다.

하지만 id = "apple-61"등의 id 패턴과 비슷한 div가 반환됩니다. 하지만 이러한 jax 코드는 div가 생성 한 Ajax에서 작동하지 않습니다.

왜 그렇습니까? 어떻게 해결할 수 있습니까?

+0

이 div에는 공통된 상위 항목이 있습니까? – sje397

답변

3

당신은 .delegate() 또는 .live() 중 하나가 아직 존재하지 않는 요소에 대한 이벤트를 처리 할 수 ​​있습니다.

이 div에는 공통 상위가있는 경우 .live() (here 참조) 대신 .delegate()을 사용하는 것이 더 효율적입니다.

$("#divContainer").delegate("[id^=apple]", "click", function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
}); 
+0

그래서 delegate()를 사용하는 부모가있는 경우 live()보다 빠릅니다. 문서에 연결되어 있고 일치하는 요소를 감지하기 위해 전체 문서를 검사하기 때문에 delegate()는 특정 요소 만 확인하여 첨부 요소를 찾습니다. event.is 맞습니까? –

+0

@hd : 예, 그렇게 이해합니다. 이 링크에서'delegate'는 실제로'live'를 호출하지만 그 범위를 컨테이너로 제한합니다. 반면'live'는 자신의 문서에 대한 위임자입니다. – sje397

5

요소가 존재하기 전에 이벤트를 바인딩하는 것이 문제입니다.

사용 live 대신 (당신이 1.3 이상 jQuery를 사용하는 가정) :

$("[id^=apple]").live("click", function(){ 
    elid = $(this).attr('id').split("-"); 
    pid = elid[1]; 
    alert(pid); 
});