2011-11-06 3 views
2

사용자가 div를 클릭 할 때 작업을 수행하려고합니다. 그러나 그가 div 내의 링크를 클릭하면 링크로 직접 보내려고합니다. 이제 href가 무시됩니다.jquery 클릭 이벤트 -

<div id=myDiv> 

    some text 
    <a href="link1">my link</a> 

    some text 
    <a href="link2">my link</a> 

    some text 
    <a href="link3">my link</a> 
<div> 


$('.myDiv').live('click', function() {   
     console.log($(this)); 
     // if clicked on link, the go directly to the link 
     .... 
     // if clicked elsewhere on div, then perform another another action and return false 
     return false; 

    }); 

====== MY 솔루션 ====

내가 롭의 솔루션을 좋아하지만, 구문은 조금 애 태우게했다 RTFM 그래서 나를 위해 작동 비슷한 함께했다.

$('.myDiv').live('click', function(event) {   
    var $target = $(event.target); 
    if($target.is("a")) { 
    return true; 
    } 
    else{ 
     // do something else 
     return false; 
    } 
}); 
+1

어떻게됩니까;'? – James

+0

이 작업은 ... 다른 작업을 수행 한 후 href를 수행하지만 링크로 직접 이동하는 것을 선호합니다. –

답변

1

event.target 속성을 확인하십시오. 아래 코드는 앵커를 클릭 할 때 return false을 실행하지 않습니다.

$('.myDiv').live('click', function(event) { 
    .... 
    // `return false` only if element != <a> 
    if(!$.nodeName(event.target, "a")) return false; 

}); 
+1

그는'if ($. nodeName (e.target, "a"))가 true를 반환하기를 원하지 않는다. – Hogan

+0

@Hogan 그는 링크를 따라 가고 싶어합니다. 'return false'는 링크가 뒤 따르지 않도록합니다. 현재 타겟이'return true'와 같은 효과를 갖는 앵커 일 때'return false '가 발생하지 않도록 코드를 수정했습니다. –

+0

그래서 기본값은 true를 반환하는 것입니까? 나는 당신의 코드에서 그것을 보지 못했습니다. – Hogan

1

전화 stopPropagation()은 링크를 클릭 할 때 : 당신이`true를 돌려주는 경우

$('.myDiv').live('click', function(e) { 
    // Perform your action here 
}); 

$('.myDiv a').live('click', function(e) { 
    e.stopPropagation(); 
}); 
+0

이것은 그가 원하는 것의 반대가 아닙니다. 링크가 작동하지 않으면 링크가 작동되기를 원합니다. – Hogan

+0

@Hogan : 아니요 - stopPropagation()은 preventDefault()가 아닙니다. http://jsfiddle.net/8sfdQ/ (Hehe ... iframe에 대한 교차 출처 규칙 때문에 예제가 작동하지 않습니다.)/죄송합니다./show /에 간다. – Ryan

+0

nice - thanks . – Hogan

관련 문제