2014-02-25 2 views
1

여기에 코드입니다 :내 메소드가 두 번 실행되는 이유는 무엇입니까?

$('.single-category')이 나는 ​​HTML의 무리를 페이드 아웃 그냥이 아이 페이드 클릭
$(document).ready(function() { 

    $('.category').click(function(){ 
     $("#category-menu").modal(); 
     $("#category-menu").css({'display' : 'block'}); 
     $('.single-category').click(function(){ 
      $('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this))); 
    /*the line above some how gets called again*/ 
     }); 

    }); 

    $('.mp-back').click(function(){ 
     $('.category-link').css('display', 'none'); 
     var testing = $(this).closest('.mp-level'); 
     testing.css('display', 'none'); /*after this line */ 
    }); 

}); 

function fadeInCategory(category){ 
    category.find('.mp-level').fadeIn('slow'); 
    category.find('ul').fadeIn('slow'); 
} 
function back2allCategories(){ 
    $('.category-link').css('display', 'block'); 
} 

. 다시 실행되고 내가 할 수있는 어떻게 든

$('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this))); 

: $('.mp-back').click(function(){ 실행이 완료되면
mp-back는, 내가 페이드 아웃 (또는 속성으로 display:none 설정)

그러나하고, 그래서 다시 이동이 줄을 생각한다 왜 그런지 알아 내지 못 하죠.
(Google 크롬 콘솔의 중단 점을 통해 발생하는 것으로 알고 있습니다.)

그러나 나는 그 이유를 알 수 없습니다.

$('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this)));이 다시 호출 되나요?

+6

당신은 다른 이벤트 핸들러 함수 내부에 이벤트 핸들러를 결합하는 함수를 호출하지 거의 안 뭔가입니다. '.category'를 클릭 할 때마다'.single-category'에 대한 추가 클릭 핸들러를 바인드하므로 여러 핸들러로 끝납니다. – Barmar

+0

흠 .. 그게 말이 되네 ... 그게 문제가 아니면 그냥 좋은 연습인가? – brendosthoughts

+2

그것이 문제입니다. –

답변

3

.category을 클릭 할 때마다 .category-link에 새 처리기가 할당됩니다. 충분한 시간을 할애하면 브라우저가 다운됩니다.

하나의 이벤트 처리기가 다른 이벤트 처리기를 지정해야하는 경우는 매우 드뭅니다. 이것은 그들 중 하나가 아닙니다;)

+0

감사합니다 ... 이것은 의미가 있습니다 ... 제가 처리하고있는 문제에 대한 해결책이 아닙니다 ... 하나의 처리기가 있습니다. 왜 다른 사람의 자식이 왜 디버거에서 루프를보고 있었는지 ... 그러나 이것은 내가 몹시 싫어하고 분명히/논리적으로 큰 문제가 될 수있는 것입니다 ... 내 코드는 더 이상 게시 된 것처럼 보이지 않으며 잘하면 실수하지 않습니다. 다시하다 – brendosthoughts

0

Niets 답 이외에 클릭 이벤트를 바인딩 해제하여 문제를 해결할 수 있습니다.

$('.category').click(function(){ 
    $("#category-menu").modal(); 
    $("#category-menu").css({'display' : 'block'}); 
    // unbind the click before binding it again 
    $('.single-category').unbind('click').click(function(){ 
     $('.category-link').fadeOut('slow', 'linear', fadeInCategory($(this))); 
     /*the line above some how gets called again*/ 
    }); 
}); 

은 분명히 그 해결 그리고 나는 그것을 할 제안하고 있지 않다, 그것은 작동합니다 :)

관련 문제