이전 포스팅에서 구현한 모달창이다
<div class="black-bg">
<div class="white-bg">
<h4>로그인하세요</h4>
<form action="success.html">
<div class="my-3">
<input type="text" id= "email" class="form-control">
</div>
<div class="my-3">
<input type="password" id="pw" class="form-control">
<p class="textholder">6자리 이상 입력하세요</p>
</div>
<button type="submit" id="submit" class="btn btn-primary">전송</button>
<button type="button" class="btn btn-danger" id="close">닫기</button>
</form>
</div>
</div>
<script>
$('.black-bg').on('click',function(){
$('.black-bg').removeClass('show-modal')
})
</script>
show-modal 클래스를 탈부착하는 식으로 구현을 했었으니 이번에도 일관성 있게 show-modal 클래스를 제거하는 방식으로 구현
검은 배경을 클릭했을 때 사라져야 하는데 흰 배경을 클릭해도 모달창이 사라진다 ...?
모든 브라우저는 이벤트가 상위 html로 퍼지는 현상 인 버블링 이 일어남
그렇기 때문에
<div class="black-bg">
<div class="white-bg">
white-bg
를 클릭해도 black-bg
를 클릭한 거로 인식됨
이벤트 콜백함수에 e라는 파라미터를 입력하면 사용 가능
e.target 🟰 유저가 실제로 누른 html 요소
e.currentTarget (= this) 🟰 이벤트리스너가 달린 곳
e.preventDefault 🟰 이벤트 기본 동작 (ex) 폼 전송) 막아줌
e.stopPropagation 🟰 상위요소로 이벤트 버블링 막기
" 내가 실제로 클릭한게 검은 배경이면 모달창 닫아주세요 " 라는 조건문 작성
<script>
$('.black-bg').on('click',function(e){
if(e.target==document.querySelector('.black-bg'){
$('.black-bg').removeClass('show-modal')
}
})
</script>
똑같이 jQuery를 사용하여 비교
<script>
$('.black-bg').on('click',function(e){
if($(e.target)==$('.black-bg')){
$('.black-bg').removeClass('show-modal')
}
})
</script>
<script>
$('.black-bg').on('click',function(e){
if($(e.target).is($('.black-bg'))){
$('.black-bg').removeClass('show-modal')
}
})
</script>
<script>
$('.black-bg').on('click',function(e){
if(e.target == this){
$('.black-bg').removeClass('show-modal')
}
})
</script>
아래처럼 해도 잘 작동한다
<script>
$('.black-bg').on('click',function(e){
if(e.target==$('.black-bg')[0]){
$('.black-bg').removeClass('show-modal')
}
})
</script>
클릭한게 검은 배경인지 확인하려면 조건문을 써야하는데 어떻게 확인해야할까?
e.target==$('.black-bg')
이라고 처음에 추측하고 실행시켰는데 작동이 안됐다
그래서 console.log($('.black-bg'))를 해보니
사진과 같은 객체가 출력되었다
그래서 $('.black-bg')[0]
사용