2012-04-30 6 views
1

다음 코드는 문서 내에 준비되어 있지 않습니다..live가 jQuery와 작동하는 방식에 대해 혼동을 야기합니다.

$('a[href^="content/"]').live('click', function(event) 
{ 
    event.preventDefault(); 
    .... 

이 코드는 마지막 body 태그 바로 위에 있습니다.

내 HTML 본문에 일치하는 href가있는 주소 링크가 있으면이 코드가 실행될 때 아직 DOM에 없더라도 클릭이 첨부됩니다. 나는 살아있는 방법에 대해 약간 혼란스러워. 나는 정상적으로 당신이 실제 요소에 .live를 사용하지 않을 것이라고 생각했지만 오히려 미래에 요소로 채울 수있는 포함하는 블록에 대해 생각했습니다.

답변

3

실제 요소에는 .live를 사용하지 않을 것이지만 장래에 요소로 채울 내용이 포함 된 블록에는 사용하지 않을 것이라고 생각했습니다.

위임자가하는 일입니다. 그러나 라이브 이벤트는 매우 유사합니다. 단순히 문서 자체를 "포함하는 블록"으로 사용합니다. 이는 jQuery가 의 모든 이벤트가 페이지에서 발생하는지 확인해야한다는 단점이 있습니다. 그래서 당신은 항상 대리자 가능한 경우를 사용해야합니다 (일반적으로는 가능하다!)


그러나, 다양한 이벤트 등록 방법은 인수에 따라 정기적 인 이벤트와 대표 모두 등록 .on()에 통합 된 jQuery를 1.7 이후 . 실시간 이벤트의 경우 대신 document에 대리인을 만들면됩니다.

// live events 
$('.foo').live('click', function(e) {}); // old 
$(document).on('click', '.foo', function(e) {}); // new 

// delegates 
$('#container').delegate('.foo', 'click', function(e) {}); // old 
$('#container').on('click', '.foo', function(e) {}); // new 
+0

사실'live()'가 델리게이트로 도큐먼트를 사용하는 이유는 너무 느립니다. 가능하면 가장 가까운 정적 부모 요소에서'delegate' (jQuery 1.7+에서는'on')를 사용해야합니다. –

0
: 여기

(그들은 단지 .bind()와 마찬가지로하지만 새로운 함수 이름 .on()에 있기 때문에 나는 일반 사람을 생략 할 것이다) 라이브/대리인 이벤트를 등록하기 이전/새로운 방법에 대한 몇 가지 예입니다

live 메서드 구문은 다소 혼란스럽고 사용하기 까다 롭습니다. 그것이 더 유연한 delegate 방법에 의해 superseeded되고, 최근에는 on 방법에 포함되었습니다.

$(document).delegate('a[href^="content/"]', 'click', function(event) { ... 

그래서, 이벤트가 실제로 문서 요소에 매여있다 :

코드는 동일합니다.

함유 된 블록으로 설명하는 내용은 live 방법으로 처리 할 수 ​​없습니다. 이벤트는 항상 문서 요소에 연결됩니다. delegate 또는 on 메소드를 사용하여 이벤트를 포함 요소에 연결합니다.

관련 문제