2010-08-23 3 views
1

div 내 사용자가 링크를 클릭하면 무시하고 싶은 div에 대한 클릭 콜백이 취소되었습니다. 이 기능은 다음과 같습니다특정 하위 요소에 대한 클릭을 무시하도록 JQuery를 원합니다.

$(".section").click(function(){ 
    if ($(this).hasClass("solid")) { 
     $(this).removeClass("solid"); 
     $(this).hover(fadeFunction, darkenFunction); 
     $(this).fadeTo(150, inactiveOpacity); 
    } 
    else { 
     $(this).addClass("solid"); 
     $(this).unbind("mouseenter"); 
     $(this).unbind("mouseleave"); 
     $(this).fadeTo(25, inactiveOpacity); 
     $(this).fadeTo(150, activeOpacity); 
    } 
}); 

나는 포장 해봤/그 밖에 if(!$(this).is("a)) { 최대하지만, 행동에 변화가 없을 경우. 누군가 내가 잘못 이해하고 있거나 잘못하고있는 것을 지적 할 수 있습니까?

죄송합니다. 쉬운 질문이라면, 저는 JQuery/css 초보자입니다.

답변

12

이벤트 대상이 같은 앵커 인 경우 확인할 수 있습니다 :

$(".section").click(function(e){ 
    if($(e.target).is("a")) return; 

    if ($(this).hasClass("solid")) { 
     $(this).removeClass("solid"); 
       .hover(fadeFunction, darkenFunction); 
       .fadeTo(150, inactiveOpacity); 
    } 
    else { 
     $(this).addClass("solid"); 
       .unbind("mouseenter mouseleave"); 
       .fadeTo(25, inactiveOpacity); 
       .fadeTo(150, activeOpacity); 
    } 
}); 
+0

Thanks Nick Craver! – Rich

5

이 시도 : 여기

$('a').click(function(e) { 
    e.stopPropagation(); 
}); 

당신이 문서를 찾을 수 있습니다 http://api.jquery.com/event.stopPropagation/

+3

이 올바른 접근 방식은 , 모든 링크가 아니라 지정된 div 내 링크로 제한하고 싶을 수도 있습니다. $ ("div.section a")를 클릭하십시오. (........ –

+0

네 말이 맞아, 나는 일반적인 접근 방식으로 생각했다. (+1) – davehauser

+3

이것은 훨씬 더 비싼 접근 방식이다. "n"이벤트 처리기를 불필요하게 바인드하는 것보다 이벤트가 발생할 때 if 체크를 추가하는 것이 더 저렴합니다. –

관련 문제