2013-02-21 3 views
-1

ajax 생성 선택기에 문제가 있습니다.jQuery ajax 반환 요소를 선택할 수 없습니다.

기본적으로 기본적으로 시작 버튼이 있습니다. onclick, 무언가를 시작한 다음 클릭하면 결과가있는 ajax 호출에서 새 div가 반환됩니다. 이 중 하나는 중지 버튼입니다. 메인 페이지에서 내 연결 스크립트는 앵커를 인쇄 리턴 콜 그것 자체에서 나는 스크립트 인라인을 넣으면이 정지 버튼

<a id="stop">stop</a> 

에 부착 된 클릭 이벤트를 가지고, 내가

에 액세스 할 수 있습니다
$('#stop').click(function() { }); 

그러나 스크립트를 원하지 않습니다 (페이지 당 여러 항목이 있고 링크 된 주요 리소스에 더 많은 정보가 있으므로). 이 호출이 주 페이지의 연결된 시트에 있으면 아무 일도 일어나지 않습니다.

왜 이런가요?

반환 요소를 처리하는 데 사용해야하는 또 다른 '문서 준비'래퍼가 있습니까?

답변

2

경우 당신은하고 싶지 :

$('#container').on('click', '#stop', function() { console.log('test'); }); 

이 또는 당신이 뭔가를 할 수

$('#stop').live('click', function(){ console.log('test'); }); 

그러나 사용하려고 할 때마다 live이 오버 헤드를 추가하기 때문에 페이지에서 많은 이벤트를 처리해야하는 경우에는 권장하지 않습니다.

+0

2 년 후이 질문으로 돌아와서 무엇을 잘못했는지 보는 것은 항상 재미 있습니다. 정적 부모에 위임 된 이벤트를 사용하여 물론 지금 :) 내 답변을 가장 "올바른"방법으로 전환 IMO – briansol

-2

요소가 존재하기 전에 주 스크립트가 이벤트를 새 요소에 추가하지 않습니다.

은 메인 스크립트에서 함수를 만드는 작업을하고 이벤트를 추가 할 때 단순히 기능을 지정합니다 -

-

주요 스크립트 다음

var your_function = function() { 
    // your code 
} 

당신이 사업부를 추가 할 때

$('#stop').click(your_function()); 

더 좋은 해결책은 부모에게 이벤트를 추가하고 거품이 날 때 처리하는 Brad M의 제안입니다.

<div id="container"></div> 

당신이에 ajax 호출의 결과를 추가하고있는 요소

+1

요소가 있기 전에 이벤트를 추가 할 수는 없지만 문서와 같은 정적 부모 요소에 이벤트를 추가 할 수 있다는 것은 맞습니다. jQuery에는 이러한 상황을 자동으로 처리하는 몇 가지 트릭이 있습니다. setInterval은 기술적으로는 효과가 있지만 솔루션의 절대적인 해킹입니다. DOM 삽입 후 항상 이벤트 핸들러를 다시 연결할 수 있습니다. 동기화를 수행 할 때 아무런 문제가 없습니다. –

+1

물론, 버튼에 계속 연결된 모든 이벤트 핸들러에 대해 단일 버튼 클릭에 대해 동일한 양의 핸들러가 실행됩니다. –

+0

예, 제안을 삭제하겠습니다. –

2

아약스를 통해 추가 된 요소에 대해 생성 한 클릭 이벤트가 발생하지 않는다는 점을 이해했습니다. 요소의 click 이벤트에 핸들러를 연결하면 현재 DOM에있는 요소에 대해서만 발생합니다. 원하는 행동을 취할 수있는 몇 가지 옵션이 있습니다.

1) 비효율적 인 "라이브"처리기를 사용하십시오.(일반적으로 밀리 초 단위로 측정 한 비효율)

$('#stop').live('click', function(){}); 

2) 요소가 DOM에 삽입 된 후 이벤트 핸들러를 다시 연결합니다. 이 버튼을 클릭하면, 이벤트가 "거품"가이 이벤트를 트리거하도록

$.ajax({ 
    complete: function(){ 
     $('#idOfTheElementsYouJustInserted').click(function(){}); 
    } 
}); 

3), 정적 부모 요소에 이벤트 핸들러를 첨부. 버블을 생성 한 요소를 참조하려면 event.target을 사용할 수 있습니다. 여기서 event는 함수에 전달되는 기본 매개 변수입니다.

$('#staticParentElement').click(function(event) { var elementClicked = event.target; }); 
+1

잘 배우고 있어요. +1. –

+0

# 2 더 자세히 설명해 주시겠습니까? 이것은 무거운 페이지이므로 No-1처럼 들립니다. # 3은이 요소 (이 ul 목록)에 여러 개의 a가 있기 때문에 문제가 될 수 있습니다. – briansol

+1

# 2는 사용자가 시작한 것입니다 (질문에 포함 시켰으며 원하는 것이 아니라고 명시했습니다). # 3으로 가십시오. 좋아. 'event.target'이'# stop' 요소인지 확인하기위한 점검이 필요합니다. –