2014-09-30 1 views
0

각 함수를 jQuery를 사용하여 현재의 $ (this)를 클릭하면 JS 코드가 실행됩니다. 다음 코드를 보면 더 명확합니다..on 함수와 .each 함수로 jQuery를 사용하는 방법

$('.switch-cal').each(function(){ 
    $(this).on('click', function(e){ 
     .... CODE HERE .... 

".each"기능을 ".each"기능으로 사용하는 올바른 방법 "this"를 알려주십시오.

감사합니다.

+0

부착 핸들러는 선택한 요소를 통해 암시 적으로 루프, 당신의 "이"범위를 유지하려는 경우. 각각을 사용할 필요는 없습니다. – kinakuta

+2

당신이 가지고있는 것은 공통적이지는 않지만 틀리지도 않습니다. 왜 당신이'this'를 올바르게 사용하지 않는 것 같습니까? –

+0

코드에 문제가 없습니다. 실제 문제가 발생하는 경우 문제에 대해 구체적으로 질문해야합니다. –

답변

4

1. 짧은 답변 : each 필요가 없습니다 :

each의 내부 click를 사용하지 마십시오가 ... 당신은 jQuery로 할 필요가 없습니다. 대부분의 작업 (이벤트 핸들러 포함)을 위해 자동으로 컬렉션을 처리합니다.

$('.switch-cal').click(function(){ 
    //$(this) is the calendar clicked 
     .... CODE HERE .... 

2. 것은 위임 핸들러를보십시오 :

그것은이다 것도 편리하지 않는 경우 하나의 위임 이벤트 가장 가까운 비 변화 조상 요소에 첨부 핸들러 (또는 document를 사용하는 것이 종종 더 편리). 위임 된 이벤트의 가장 큰 특징은 아직 존재하지 않는 요소에 대해 작업 할 수 있다는 것입니다. :)

버블 체인의 요소에 선택기를 적용하기 만하면되므로 런타임 오버 헤드가 매우 낮습니다. 초당 50,000 마우스 조작을 처리하지 않는 한 속도 차이는 무시할 수 있으므로 마우스 이벤트의 경우 비효율에 대한 우스꽝스러운 주장 (예 : 아래 유권자의 맹공격과 같이)을 수행하지 마십시오. 일반적으로 여분의 오버 헤드가 발생하지 않는 이점이 있습니다. 아무도 초당 50,000 회 클릭하지 않습니다! :

$(document).on('click', '.switch-cal', function(){ 
    //$(this) is the calendar clicked 
     .... CODE HERE .... 

위임 이벤트 (이 경우 click에서) 이벤트를 수신 비 변화 조상 요소에 DOM을 버블 링에 의해 작동합니다. 다음 선택기가 적용됩니다. 이면은 이벤트를 일으키는 요소가 일치하는 의 함수를 호출합니다.

변경되지 않은 요소가 문제의 요소에 가까울수록 필요한 테스트 수가 줄어들지 만 더 편리한 것이 없으면 document은 폴백입니다. body을 사용하지 마십시오. 스타일과 관련된 문제로 인해 이벤트가 실행되지 않을 수도 있습니다.

+0

이벤트를'document'에 위임하는 것이 더 효율적이지 않습니다. 그들은 사람들이 그렇게 모든 일을 위임했기 때문에'.live() '를 제거했습니다. 위임을 사용하는 경우 가능한 한 로컬로 유지해야합니다. –

+0

연구 해주세요. jQuery의 이벤트 시스템 코드를 공부 했습니까? 낙담시키지 마십시오. * "... 그들은 단지 거품 쇠사슬의 요소에만 적용될 필요가 있습니다"*는 무엇입니까? 그건 말이되지 않습니다. 이벤트가'document'까지 버블 링 된 후에'event.target'으로 되돌아 가야하고, 수동으로'document'에 버블 링되고 매번'.is()'연산이 실행되어야합니다. 요소를 사이에두고 선택기와 일치하는지 확인하십시오. 그리고 * 제공되는 모든 선택기에 대해이를 수행해야합니다. 전혀 효과적이지 않습니다. –

+0

아니, 합의 없음. 그것이 더 효율적이라는 주장은 가짜입니다. 동일한 처리기를 여러 요소에 바인딩하는 메모리 오버 헤드로 계산 오버 헤드의 우려를 최소화 할 수는 없기 때문에 설득력있는 것으로 입증 된 것은 아닙니다. –

-1

@TrueBlueAussie가 정답을 가졌습니다. 단일 위임 이벤트를 사용해야합니다. $(document).on('click', '.switch-cal', function(){ //$(this) is the calendar clicked .... CODE HERE ....

아직도 당신은 할 수있다 JQuery와의

$('.switch-cal').each(function(){ $(this).on('click', function(e){ .... CODE HERE .... }.bind(this)) });

+1

'bind'는 필요 없습니다. 그것은 각각의 개별 요소 (작동, 그냥 정말 낭비)에 그대로 올바르게 등록됩니다. –

+0

@TrueBlueAussie 오! 덕분에^ – aemonge

+0

가장 짧은 방법을 사용할 수 있습니다 : $ (this) .click (function (e) {}); – Ragnar

관련 문제