2012-03-26 2 views
0

을 위해 내가jQuery를 : 함수

this post을 읽고 내가 대답 생각하지 않았다 질문이 있었다 "의" "라이브"과의 차이. 왜이 작업을 수행합니다

$('#threeButtons').live('click', '.markAsSpam', function() { 
    // do some stuff 
}); 

을하지만이되지 않습니다 :

$('#threeButtons').on('click', '.markAsSpam', function() { 
    // do some stuff 
}); 

내가 매개 변수가 다르다 볼 수 있지만, 나는 CSTE 연구진 사용하는 방법의 예를 다음입니다. 적어도 그것이 나의 예에 적용되는 한. 나는 DOM에 추가 된 HTML을 처리하고 있기 때문에이 .live 또는 CSTE 연구진를 사용할 필요가
<div id="threeButtons"> 
    <a href="#" class="markAsSpam">Spam</a> 
    ... 
</div> 

처럼

내 DOM 보인다. 또한, .live 예제는 처음으로 작동합니다. 페이지를 새로 고치지 않고 연속 시도를하려면 어떻게해야합니까? jQuery 1.7을 사용하고 .live가 사용되지 않으므로 .on을 사용하려고합니다. 워드 프로세서

+1

두 번째 인수를'.live()'에 잘못 사용하고 있습니다. 그것은 이벤트 객체에 대한 데이터를 설정하기위한 것입니다. jQuery의'live()','delegate()'및'on()'메소드는 * event delegation *을 사용합니다. 그것들을 사용하기 전에 그것에 대해 배울 가치가 있습니다. 두 번째 예제에서와 같이 두 번째 인수를 제공 할 때만 이벤트 위임을 사용합니다. * –

+0

...'.live()'는' 문서 '. 이것은 불행한 결정이었습니다 ... 따라서 비추천. –

답변

1

:

$('#threeButtons').live('click', '.markAsSpam', function() { 
    // do some stuff 
}); 

:

.live(events, data, handler(eventObject))

그래서 다음 코드는 단순히 추가 인수 .markAsSpam을 받게됩니다 #threeButtons에 대한 라이브 클릭 이벤트를 등록합니다 그러나 .on()을 사용하면 click 핸들러는 #threeButtons에 바인딩되지만 클릭 된 요소가 .markAsSpam 선택기와 일치하는 경우에만 이벤트가 실행됩니다.

+0

예 : http://jsfiddle.net/DHK2m/1/ –

+0

또는 http://jsfiddle.net/ThiefMaster/DHK2m/2/ 차이점을 보여주기 위해 – ThiefMaster

+0

Gotcha. 그러나 왜 그것이 한 번만 작동합니까? 스팸 버튼은 모든 항목에 있습니다. 이것들은 for 루프에 추가 된 다음 추가됩니다. – sehummel

관련 문제