2012-06-05 3 views
1

내가 정복하지 않는 또 다른 문제가있는 것 같습니다. 진짜 간단한 전제. 나는 mousedown 이벤트를 가지고 있으며 기본적으로 페이지의 특정 요소 하나를 클릭하면 아무 일도 일어나지 않습니다. 그렇지 않으면 hide() div가 필요합니다.왜이 작동하지 않습니다 - not() 이벤트 처리기와 함께

$(function(){ 
     $("document :not(#_ignorelement)").mousedown(function(event){ 
       if($('#_hidethiselement').length){ 
        $('#_hidethiselement').hide(); 
       } 
     }) 
    }) 

전혀 작동하지 않습니다. 나는 또한 시도 다음 : "없습니다"나는 그것을 해결할 수있는 경우

$(document).not($("#_ignorelement")).mousedown(function(event){ 

    $(document).not("_ignorelement").mousedown(function(event){ 

, 호기심 실제로이 얼마나 부모 DIV를 포함 그래서 같은 :

$().not("_ignoreelement").parent().closest('div').mousedown(function 

때문에 요소 "_ignorelement" div에있는 앵커 태그입니다. 앵커 태그 대신 어쩌면 부모 div를 어떻게 사용할 수 있을지 궁금합니다.

어쨌든, 어떤 도움을 주시면 감사하겠습니다.

+0

왜 '클릭'이 아닌 'mousedown'을 사용하고 있습니까? – FishBasketGordo

+1

첫 번째 선택자에서'document' 대신'html' 또는'body'가 필요하다고 생각합니다 – Musa

+0

DOM을 전파하기 전에 클릭이 잡히는 페이지의 일부 항목/요소가 있기 때문에 mousedown을 사용하고 있습니다. 클릭이 발생했는지 알 수있는 또 다른 방법이 필요합니다. mousedown. –

답변

2

document은 (는) 선택할 수있는 노드가 아닙니다. 대신이 시도 : 정말 당신이 선택을 실행하지 않도록 웹의 jQuery 객체를 캐시하는 것은 좋은 생각이라고

var ignoreNode = jQuery('#_ignorelement')[0]; 

jQuery(document).on('mousedown', function(e) { 
    if (ignoreNode === e.target || jQuery.contains(ignoreNode, e.target)) { 
    // If the target is, or is inside the ignoreNode, don't 
    // do anything. 
    return; 
    } 

    // Do your hiding handling here 
}); 

참고 :

여기
$(function(){ 
    $("body :not(#_ignorelement)").mousedown(function(event){ 
     if($('#_hidethiselement').length){ 
      $('#_hidethiselement').hide(); 
     } 
     return false; 
    }) 
}); 

가이 일을해야 working example

+0

작동하지 않습니다. 'body'클릭시 트리거됩니다. – VisioN

+0

catch @VisioN에 감사드립니다. 나는 그것을 막기 위해'return false' 문을 추가했습니다. – FishBasketGordo

+0

또한 버블 링을 취소해야합니다. 그렇지 않으면 모든 부모 요소는'mouseup' 이벤트를받습니다. – powerbuoy

1

입니다 모든 이벤트에 대한 쿼리!

+0

캐시를 사용하라는 알림에 대해 감사드립니다. 그게 내 마음을 미끄러 져. : _) –

관련 문제