2014-06-09 6 views
0

'영웅'ID를 클릭하면이 jQuery의 '# hero-text'에 중첩 된 fadeToggle이 발생하고 이유를 파악하고이 동작을 해결하는 방법을 설명하려고합니다.중첩 된 fadeToggle이 두 번 왜 화재가 발생합니까?

$(document).ready(function() { 
     $('#hero').click(function() { 
      $('.non-hero').fadeToggle(800, function() { 
       $('#hero-text').fadeToggle(); 
      }); 
     }); 
}); 
+3

이 마크 업을하시기 바랍니다 붙여 넣습니다. 또는 동작을 보여주는 jsfiddle를 만듭니다. – Icarus

+0

+1 - 마크 업을 보자. 아마도'e.stopPropagation(); '을 사용할 필요가 있습니다. – PeterKA

+0

[jsfiddle] (http://jsfiddle.net/mattdionis/GbgvH/1/)에 대한 링크가 있습니다. 상자를 클릭하면 중첩 된 fadeToggle이 매 2 회 실행됩니다. – MattDionis

답변

2

본인은 수시로이 문제가 발생했습니다. 당신은 이유를 알아 내려고 시간을 보낼 수 있습니다,하지만 당신은 빠른 해결책을 원하는 경우, 여기 당신은 간다 :

$(document).ready(function() { 
     $('#hero').off().click(function() { 
      $('.non-hero').fadeToggle(800, function() { 
       $('#hero-text').fadeToggle(); 
      }); 
     }); 
}); 

위의 대답은 '#hero는'여분의 바인딩을 받고있는 사건을 해결합니다. 그러나 '.non-hero'가 두 곳 이상에서 사용되는 경우가있을 수 있습니다. 이 함수는 각 인스턴스에 대해 실행될 것이고, '# hero-text'에 대해 fadeToggle을 트리거하는 별도의 이벤트를 발생시킵니다.

$(document).ready(function() { 
     $('#hero').click(function() { 
      $('.non-hero').fadeToggle(800); 
      setTimeout(function() { 
       $('#hero-text').fadeToggle(); 
      }, 800); 
     }); 
     $('#primary').click(function() { 
      $('.non-primary').fadeToggle(800); 
      setTimeout(function() { 
       $('#primary-text').fadeToggle(); 
      }, 800); 
     }); 
     $('#secondary').click(function() { 
      $('.non-secondary').fadeToggle(800); 
      setTimeout(function() { 
       $('#secondary-text').fadeToggle(); 
      }, 800);      
     }); 
    }); 

을 그리고 당신이 고려하는 웃음을 위해 나는 다른 jsfiddle을 게시 :

당신의 jsfiddle에 의하면,이 시도

http://jsfiddle.net/GbgvH/3/

+0

불행히도 '.non-hero'는 여러 곳에서 사용되며, 여러 번 발사되는 원인입니다. – MattDionis

+0

간단한 해결책으로, '. 영웅'페이드 아웃에 범위를 추가하거나 '# 영웅 텍스트'에 범위를 추가하기 만하면됩니다. 보다 구체적인 답변이 필요하면 나머지 마크 업을 게시해야합니다. –

+0

다음은 [jsfiddle] (http://jsfiddle.net/mattdionis/3ep4M/)에 대한 링크입니다. 나는 스코핑의 기본을 이해하지만,이 중 하나는 여전히 나를 걸고있다. – MattDionis