2016-09-23 173 views
1

div裏面有div。如果內部div已被點擊(closeme div),我不想運行其他div(container div)單擊事件。我怎樣才能做到這一點 ?jquery-div div,如何在裏面點擊時只運行1個點擊事件

HTML

<div id="container"> 
content 
<div id="closeme"></div> 
</div> 

JS

$(document).on('click', '[id="container"]' ,function(){ 
alert("I am clicked"); 
} 

$(document).on('click', '[id="closeme"]' ,function(){ 
alert("I am clicked"); 
} 
+2

https://api.jquery.com/event.stoppropagation/ - 用戶'event.stoppropagation' –

回答

2

$(document).on('click', '[id="container"]', function(e) { 
 
    e.stopPropagation(); 
 
    alert("I am container"); 
 
}) 
 

 
$(document).on('click', '[id="closeme"]', function(e) { 
 
    e.stopPropagation(); 
 
    alert("I am closeme"); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    content 
 
    <div id="closeme">qwe</div> 
 
</div>

使用event.stopPropagation()

說明:防止事件冒泡DOM樹,阻止任何父處理程序被通知事件。

+0

感謝。我需要在容器功能之前放置closeme函數嗎?因爲如果容器首先獲取click事件(即使用戶單擊了closeme),它會停止並且不會運行closeme函數? –

+0

我懷疑訂單影響 – guradio

1

像其他人剛纔提到的一樣。您必須停止事件傳播。這是一個完整的工作示例。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
</head> 
<body> 
    <div id="container"> 
    content 
    <div id="closeme">Inner Div</div> 
    </div> 
</body> 
    <script> 
    $(document).on('click', '[id="container"]', function(event) { 
     alert("container clicked"); 
    }); 

    $(document).on('click', '[id="closeme"]', function(event) { 
     event.stopPropagation(); 
     alert("coloseme clicked"); 
    }); 
    </script> 
</html> 
2

做一次,如果測試如果目標是#closeme

$(document).on('click', '[id="closeme"]', function(event) { 
    if ($(event.target).is('[id="closeme"]')) { 
     alert("coloseme clicked"); 
    } 
    });