onclick
이벤트를 첨부 한 div가 있습니다 . 이 div에는 링크가있는 태그가 있습니다. 링크를 클릭하면 onclick
div 의 이벤트도 트리거됩니다. 링크를 클릭하면 div onclick
가 실행되지 않도록 어떻게 비활성화 할 수 있습니까?
스크립트:
$(document).ready(function(){
$(".header").bind("click", function(){
$(this).children(".children").toggle();
});
})
html 코드 :
<div class="header">
<a href="link.html">some link</a>
<ul class="children">
<li>some list</li>
</ul>
</div>
답변
이 작업을 수행:
$(document).ready(function(){
$(".header").click(function(){
$(this).children(".children").toggle();
});
$(".header a").click(function(e) {
e.stopPropagation();
});
});
당신이 할 경우 더 .stopPropagation 읽어 (), 이쪽을 봐주세요 .
답변
또는 다른 처리기를 방지하기 위해 추가 이벤트 처리기를 갖지 않고 click 이벤트 처리기에 전달 된 Event Object 인수를 사용하여 자식의 클릭 여부를 확인할 수 있습니다. target
클릭 한 요소가되고 currentTarget
.header div가됩니다.
$(".header").click(function(e){
//Do nothing if .header was not directly clicked
if(e.target !== e.currentTarget) return;
$(this).children(".children").toggle();
});
답변
체인과 함께 on () 을 사용하여 더 나은 방법
$(document).ready(function(){
$(".header").on('click',function(){
$(this).children(".children").toggle();
}).on('click','a',function(e) {
e.stopPropagation();
});
});
답변
여기에 대한 답변은 OP의 질문을 문자 그대로 받아 들였습니다. 이러한 답변을 단일 <a>
태그 뿐만 아니라 많은 하위 요소가있는 시나리오로 어떻게 확장 할 수 있습니까? 한 가지 방법이 있습니다.
배경이 검게 표시된 사진 갤러리가 있고 브라우저의 중앙에 사진이 있다고 가정 해 봅시다. 검은 색 배경을 클릭하면 (배경 안에는 없음) 오버레이를 닫고 싶습니다.
가능한 HTML은 다음과 같습니다.
<div class="gallery" style="background: black">
<div class="contents"> <!-- Let's say this div is 50% wide and centered -->
<h1>Awesome Photos</h1>
<img src="img1.jpg"><br>
<img src="img2.jpg"><br>
<img src="img3.jpg"><br>
<img src="img4.jpg"><br>
<img src="img5.jpg">
</div>
</div>
JavaScript는 다음과 같이 작동합니다.
$('.gallery').click(
function()
{
$(this).hide();
}
);
$('.gallery > .contents').click(
function(e) {
e.stopPropagation();
}
);
이렇게하면 .contents
모든 조사에서 내부 요소의 클릭 이벤트가 중지 .gallery
되므로 어두운 검정색 배경 영역을 클릭 할 때만 갤러리가 닫히지 만 컨텐츠 영역을 클릭하면 갤러리가 닫히지 않습니다. 이것은 많은 다른 시나리오에 적용될 수 있습니다.
답변
나는이 질문에 걸려 다른 대답을 찾았습니다.
모든 어린이 가 부모를 촉발 하지 못하도록 하고 싶었습니다 .
자바 스크립트 :
document.getElementById("parent").addEventListener("click", function (e) {
if (this !== event.target) return;
// Do something
});
jQuery :
$("#parent").click(function () {
// Do something
}).children().on("click", function (e) {
e.stopPropagation();
});
답변
아니면 이거:
$(document).ready(function(){
$(".header").click(function(){
$(this).children(".children").toggle();
});
$(".header a").click(function(e) {
return false;
});
});
답변
가장 간단한 해결책은이 CSS를 자식에 추가하는 것입니다.
.your-child {
pointer-events: none;
}