2016-09-23 117 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"); 
    } 
    });