[JQUERY] 대표 VS 라이브 jQuery를 () () [중복]
JQUERY대표 VS 라이브 jQuery를 () () [중복]
해결법
-
1.나는 라이브 사용하지 않습니다; 나는 압도 할 정도로 상당한 것으로 대리자를 사용할 때의 이점을 고려한다.
나는 라이브 사용하지 않습니다; 나는 압도 할 정도로 상당한 것으로 대리자를 사용할 때의 이점을 고려한다.
라이브의 하나의 장점은 문법이 매우 가까운 바인드의 그것 때문이다 :
$('a.myClass').live('click', function() { ... });
대표는 그러나, 구문 자세한 조금 더를 사용합니다 :
$('#containerElement').delegate('a.myClass', 'click', function() { ... });
이것은, 그러나, 실제로 무슨 일이 일어나고 있는지에 대해 훨씬 더 명시 적으로 나에게 보인다. 당신은 이벤트가 실제로 문서에 포착되고 있음을 라이브 예에서 인식하지 않는다; 위임과 함께, 이벤트 캡처가 #containerElement에 일어나는 것이 분명하다. 당신은 라이브와 같은 일을 할 수 있지만 구문은 점점 더 무시 무시한된다.
귀하의 이벤트도 캡처 성능을 향상 할 수 할 수있는 컨텍스트를 지정. 라이브 예로, 전체 문서의 모든 번의 클릭은 일치하는지 확인하기 위해 선택 a.myClass과 비교되어야한다. 대리자 즉 #containerElement에서만 요소이다. 이것은 분명히 성능이 향상됩니다.
마지막으로, 라이브 a.myClass에 대한 브라우저 외모가 현재 존재하는지 여부를해야합니다. 추가 성능 이점을주는 이벤트가 트리거되는 요소 만 모습을 위임합니다.
당신이 대리인으로 할 수있는 라이브와 함께 당신은 아무것도 할 수 있도록 NB 위임의 사용은, 뒤에서 살고 있습니다. 그들은 일반적으로 사용되는로 내 대답은 그들과 함께 다루고있다.
도 라이브도 대리인이 현대 jQuery를에 이벤트 위임을 할 수있는 최선의 방법임을 유의하십시오. (jQuery를 1.7와 같은) 새로운 구문에 대한 함수이다. 구문은 다음과 같습니다 :
$('#containerElement').on('click', 'a.myClass', function() { ... });
-
2.그들은 정확히 제외하고는 동일합니다 :
그들은 정확히 제외하고는 동일합니다 :
당신이) (.delegate를 호출 할 때, 그냥 돌아 서서 전화는 (.live)하지만, 추가 컨텍스트 매개 변수를 전달합니다.
https://github.com/jquery/jquery/blob/master/src/event.js#L948-950
따라서, 난 항상 .delegate 사용하십시오 (). 이 페이지의 모든 이벤트를 처리 할 당신이 정말로 필요하면, 바로 컨텍스트로에게 몸을 제공합니다.
$(document.body).delegate('.someClass', 'click', function() { // run handler });
jQuery를 이전 버전은 실제로 위임 기능을 사용할 수 있습니다. 당신은 .live 호출 할 때) (컨텍스트 속성으로 선택기 또는 요소를 통과해야합니다. 물론,이 페이지에로드 될 필요가있다.
$('.someClass', '#someContainer').live('click',function() { // run handler });
그리고 당신은 .delegate로 () 같은 동작을합니다.
-
3.두 가지 상황이 마음에 와서 :
두 가지 상황이 마음에 와서 :
-
4.이 예제를 고려
이 예제를 고려
<ul id="items"> <li> Click Me </li> </ul> $('#items').delegate('li', 'click', function() { $(this).parent().append('<li>New Element</li>'); });
우리의 선택의 맥락으로 DOM 요소를 전달함으로써, 우리는 라이브 () 행동하라 (거의) 위임 ()가 수행하는 것과 같은 방법을 만들 수 있습니다. 기본 컨텍스트입니다 - 그것은 문맥이 아닌 문서에 핸들러를 연결합니다. 아래의 코드는 위와 대리자 () 버전과 동일하다.
$("li", $("#items")[0]).live("click", function() { $(this).parent().append("<li>New Element</li>"); });
자원
더 나은 성능 여기를 참조하십시오, 당신은보다 효율적으로 사용 대리자를 거라고
from https://stackoverflow.com/questions/4579117/jquery-live-vs-delegate by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 어떻게 jQuery를 / 자바 스크립트를 사용하여 내 웹 페이지에 내 폴더 중 하나에서 모든 이미지를로드 (0) | 2020.10.03 |
---|---|
[JQUERY] 어떻게 $ 아약스와 쿼리 문자열 대신 JSON을 보내? (0) | 2020.10.03 |
[JQUERY] 의 jQuery CSS 속성을 사용하여 배경 이미지 설정 (0) | 2020.10.02 |
[JQUERY] 오브젝트 속성에 기초하여 제거 배열 요소 (0) | 2020.10.02 |
[JQUERY] jQuery를에 체크 박스 값을 검색하는 방법 (0) | 2020.10.02 |