2012-11-29 4 views
0

나는 HTML를 추가하는 기능 onclick 있습니다. 그리고 그 작동하지만 다른 클래스를 추가했습니다 .test 및 클릭하면 함수가 트리거되지 않습니다. 왜 ? 감사합니다. .APPEND의 HTML은

바이올린 : http://jsfiddle.net/csL8G/3/

답변

2

jQuery를 사용하는 경우 jQuery.on() 메서드를 사용할 수 있습니다. 1.7+

//.on(events [, selector] [, data], handler(eventObject)) 

$(document).on('click', '.test', function(){ 
    //.... 
}); 

이전 버전의 u는 .live() 또는 .bind() 방법을 사용할 수 있습니다.

+0

완벽하게 작동합니다. 감사합니다! – Kaherdin

+0

@Kaherdin 내 답변은 Talha 이전에 게시되었으며 on() 영역을 body 태그로 제한한다는 것과 정말로 동일합니다. 그런데 왜이 대답을 선호합니까? – jtheman

+2

@Kaherdin -이 접근 방식은'document'의 모든 요소에 click 이벤트 처리기를 추가한다는 점에 유의하십시오. 만약 당신의 링크가 모두 컨테이너 요소 안에 있다면,'document'를 그것을위한 선택자 (예를 들어'# container')로 바꾸는 것이 오버 헤드가 적어 지므로 더 나은 방법입니다. – Archer

1

사용이 동적으로 추가 .test 요소를 확인하기 위해 미만 1.8은 다음 라이브 대신 사용하면 jQuery를 사용하는 경우

jQuery("body").on('click', '.test', function() { 
    jQuery(this).prevAll("input").val("5"); 
    jQuery(".after").append("<div><input /><a class='.test'>click doesn't work !</a></div>"); 
}); 

: 기본적으로

jQuery('.test').live('click', function() { ... 

이유는 DOM이로드 될 때 초기 클릭 기능이 문서의 이미 요소에 적용되기 때문입니다. 하지만 on() 핸들러를 사용하면 영역에 내용이 테스트 클래스가 있고 click 이벤트가 작동하도록 만드는 리스너를 설정합니다.

+0

을해야합니다 *** 왜 ***이 사용합니까? – ahren

+0

@ahren 당신은 이미 위의 코멘트에 대답했습니다 ... – jtheman

+0

그러나 위에서 제안한대로'.on()'메서드를 사용하면 문제를 해결할 수 있습니까? (나 자신에게 이것을 요구하는 것이 아니며, 좀 더 철저한 대답을 요구하고있다.) – ahren

0

이봐 당신이 쓴 당신의 HTML을 확인합니다

<a class=".test"></a> 

는 단지 class="test"

jQuery("body").on('click', '.test', function() { 
    jQuery(this).prevAll("input").val("5"); 
    jQuery(".after").append("<div><input /><a class='test'>click doesn't work !</a></div>"); 
}); 
+0

jquery에 헤이 사람이 당신에게 유형이 추가되었습니다 그것은 당신의 실수입니다! – Heart

+0

.on() 및 .live() 또는 .delegate() 함수가 필요하지 않습니다! – Heart