2012-06-05 47 views
1

我似乎有另一個問題,我不征服。真正簡單的前提。 我有一個mousedown事件,基本上如果頁面上的某個特定元素被點擊,我不想發生任何事情,否則我想隱藏()一些div。爲什麼不工作 - 使用:不是()與事件處理程序

$(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'而不是'click'? – FishBasketGordo

+1

我認爲你需要在第一個選擇器中使用'html'或'body'而不是'document' – Musa

+0

我使用mousedown,因爲頁面上有一些項目/元素在點擊被傳播之前被捕獲,所以我需要另一種方法來知道點擊是否發生,即。鼠標按下。 –

回答

2

document不是您可以選擇的節點。試試這個:

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

這裏有一個working example

+0

它不會工作 - 會觸發'body'點擊。 – VisioN

+0

感謝您的支持@VisioN。我添加了一個'return false'語句來防止這種情況。 – FishBasketGordo

+0

您還需要取消冒泡。否則,所有的父元素也會收到一個'mouseup'事件。 – powerbuoy

1

這應該工作:

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 
}); 

注意,這確實是一個好主意,緩存您的jQuery的對象,這樣你沒有運行選擇查詢每一個事件!

+0

感謝一堆關於提醒緩存它們。這下滑了我的想法。 :_) –

相關問題