2017-03-10 54 views
3

這裏的特定元素是我的代碼:上點擊全身除特定元素

$(document).click(function(e){ 
 
    if($(e.target).closest("#myid").length > 0) { 
 
    return false; 
 
    } 
 
    alert('clicked'); 
 
});
#myid{ 
 
    border: 1px solid; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <div id="myid"> 
 
    something <br> 
 
    <a target="_blank" href="#">link</a> 
 
    <p>paragraph</p> 
 
    </div> 
 
</div>

正如你看到的,當你點擊了div#myid元素,警報將被顯示。我希望當您點擊link時也會顯示該警報。我怎樣才能做到這一點?

+0

添加一個條件來檢查事件目標是否是鏈接...? – CBroe

+0

https://api.jquery.com/click/ –

+0

@stack - 請將額外支票添加到您的目標並檢查其鏈接。看到我的答案。我已解決您的問題 –

回答

3

要做到這一點,你可以添加其他條件,你如果去掉了#myid元素中的a元素。試試這個:

$(document).click(function(e) { 
 
    var $target = $(e.target); 
 
    if ($target.closest("#myid").length > 0 && $target.is(':not(a)')) { 
 
    return false; 
 
    } 
 
    alert('clicked'); 
 
});
#myid { 
 
    border: 1px solid; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <div id="myid"> 
 
    something <br> 
 
    <a target="_blank" href="#">link</a> 
 
    <p>paragraph</p> 
 
    </div> 
 
</div>

+0

謝謝.. uvpote – stack

+0

有一個問題,'$(e.target)'和'$(這個)'? – stack

+1

沒有。這裏$(this)意思是$(document),因爲你將一個事件附加到$(document) –

0

爲什麼不簡單地將事件監聽器添加到#myid

$('#myid').on('click', function(event) { 
 
    alert('clicked'); 
 
})
#myid{ 
 
    border: 1px solid; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <div id="myid"> 
 
    something <br> 
 
    <a target="_blank" href="#">link</a> 
 
    <p>paragraph</p> 
 
    </div> 
 
</div>

+0

此邏輯與OP正在嘗試執行的操作相反 –

+0

他希望在單擊'#myid'時以及單擊'#myid'內的'link'時發出警報。我在這裏錯過了什麼嗎? – dschu

+1

不,他希望當你點擊'a'或任何地方時顯示警報* * #myid' –

1

我已經添加了另一檢查的過程如下:

if($(e.target).closest("#myid").length > 0 && $(e.target).attr("id") !=="linkID") 

添加你的鏈接id屬性爲:

<a target="_blank" id="linkID" href="#">link</a> 

請參閱小提琴。它的做工精細

$(document).click(function(e){ 
 
    if($(e.target).closest("#myid").length > 0 && $(e.target).attr("id") !=="linkID") { 
 
    return false; 
 
    } 
 
    alert('clicked'); 
 
});
#myid{ 
 
    border: 1px solid; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div> 
 
    <div id="myid"> 
 
    something <br> 
 
    <a target="_blank" id="linkID" href="#">link</a> 
 
    <p>paragraph</p> 
 
    </div> 
 
</div>

+1

謝謝你 - upvoted你的問題:) –

1

你需要得到您單擊的當前目標。在這種情況下,你需要在當前目標(它將成爲錨點)之前區別開來。

您可以使用.is()jQuery method來判斷您點擊了哪個元素。 實施例:

$(document).click(function(e) { 
    if($(e.target).is("a")){ 
    alert("You clicked the anchor"); 
    e.stopPropagation(); 
    return; 
    } 

    if ($(e.target).closest("#myid").length > 0) { 
    return false; 
    } 

    alert('clicked'); 
}); 

我前進到檢查是否點擊的元素是錨元件之前加入的條件。更好地添加一些內容來獨特地選擇它,比如一個班級或一個Id。

我使用.is()方法,根據您傳遞的查詢特定DOM元素的條件返回true或false。在這種情況下,我檢查元素是否是錨標籤。請注意,我使用.stopPropagation()method來防止事件冒起來,這在這種情況下不需要,但在這種情況下,這是一種很好的做法,因爲這可能會導致意想不到的行爲。最後,不要忘記返回以避免執行後面的代碼。

如果您不需要保持錨點的默認行爲,即不想導航到href屬性中指定的位置,請防止使用event.preventDefault()方法或返回false

檢查小提琴here