제이쿼리 질문 드립니다(모달 배경 클릭시 클래스 제거)

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
제이쿼리 질문 드립니다(모달 배경 클릭시 클래스 제거)

QA

제이쿼리 질문 드립니다(모달 배경 클릭시 클래스 제거)

본문

3551634313_1657173022.9103.png

 

스터디용으로 나이키 사이트를 카피하고 있습니다.

 

960px 이하에서 작동하는 모바일메뉴를 만들고 있는데,

따로 close 버튼 없이 배경을 클릭하면 들어가게 만들고 싶거든요,,

 

.slide_menu_wrap에 배경을 주었고 그 안에 .slide_menu가 있는 구조입니다.

이벤트 타겟으로 wrap 클릭, 클릭 대상이 .slide_menu가 아니라면 닫기

이런식으로 짰는데 안되네요..

제 머리론 이 이상 방법이 생각나지 않아서.. 도움주실 분 구합니다.. ㅠ

 


function slideMenuOpen(){
  $('.slide_menu_wrap').addClass('on');
}
$(function(){
        $('.slide_menu_wrap.on').on('click', function(e) { 
            
            if( e.target != $('.slide_menu') ){ 
               return false;
            }else{
                $('.slide_menu_wrap').removeClass('on');
            }
    });
});
 

이 질문에 댓글 쓰기 :

답변 3



            if( $(e.target) == $('.slide_menu') ){ 
alert("확인");
               return false;
            }else{
                $('.slide_menu_wrap').removeClass('on');
alert("확인2");
            }

이런식으로 정확히 동작하는지 체크하신 후에 removeClass 말고 그냥 display:none 를 해주면 없어지지 않나요?

$('.slide_menu_wrap').css('display', 'none');

다시 살릴때는

$('.slide_menu_wrap').css('display', '');

오 감사합니다! 이걸로 확인해보니까 계속 확인2가 뜨네요 ㅠ
wrap의 자식 요소라서 slide_menu를 클릭해도 계속 wrap을 클릭한걸로 인식하나봐요..

자식선택하는 법을 찾아봐야겠어요 큰 도움 되었네요 감사합니다!

slide_menu를 클릭했을때, slide_wrap을 클릭했을때로 나눠서 작성해주었더니 잘 작동됩니다 감사합니다!!
지식인이면 내공 드리고 싶을 정도로 감사해요 ㅠㅠ


$('.slide_menu').click(function(){
	alert("확인");
	return false;

});	

$('.slide_menu_wrap').click(function(){
    
	$('.slide_menu_wrap').removeClass('on');
	alert("확인2");

});

채택하였습니다!

그런데 새로운 문제가 발생했어요.. slide_menu 안의 a들이 클릭되지 않는 상태가 되었네요,,
return false 때문이겠죠... 어디부터 잘못된것일까요..ㅋㅋㅋ


$('.slide_menu_wrap').click(function(){			
						
	$('.slide_menu').click(function(){
		return false;
		$('.slide_menu a').click(function(){
			event.preventDefault();
		});
	});
	$(this).removeClass('on');
});


이런 식으로 쓰면 무리수일까요?..
해결됐다고 생각했는데 새로운 문제에 직면하니 멘붕이네요...

음 return false; 는 왜있는거죵..?ㅋㅋㅋ
$('.slide_menu_wrap').click(function(){

$('.slide_menu').click(function(){
return false;
$('.slide_menu a').click(function(){
그리고 얘네들이 다 안에 들어갈 필요없이 각각 개별적으로 선언해서 쓰셔야할 것 같아요!
$('.slide_menu_wrap').click(function(){
});
$('.slide_menu').click(function(){
)};
$('.slide_menu a').click(function(){
});
이런식으로..
안그러면 제일 상위 클릭이 안되면 그 안에있는 얘들은 실행조차 안되니까요!

해결되었습니다 감사합니다!!


$('.slide_menu_wrap').click(function(){			
	$(this).removeClass('on');
});

$('.slide_menu').click(function(){
	return false;
});

$('.slide_menu a').click(function(){
	event.stopPropagation(); 
});

e.target != $('.slide_menu')
 

비교하는 객체가 Element와 jquery 객체라서 다를수밖예 없습니다
$(e.target) != $('.slide_menu')
비교문을 사용하시려면 로 하셔야 됩니다
 

그 부분 수정해봐도 작동이 안되네요 ㅠ
혹시나 해서  등호 갯수를 바꿔봐도,, $(e.target)을 변수에 담아봐도,,
몇 시간동안 붙잡고 있어요 ㅠ

function(e)는 제가 잘 안써봐서 그런지,,
혹시 다른 좋은 방법이 있을까요?

e.target 이 slide_menu와 같으면 return false;

아니면 removeClass로 해야하는데 바보같이 썼네요,,

하지만 여전히 되지 않고 있습니다 도와주세요 ㅠㅠ

 


 
        $('.slide_menu_wrap.on').on('click', function(e) { 
            
            if( $(e.target) == $('.slide_menu') ){ 
               return false;
            }else{
                $('.slide_menu_wrap').removeClass('on');
            }
        });
 

클릭이벤트 주어를 .slide_menu_wrap.on 으로 하면 아예 클릭이 안되는 것 같고
.slide_menu_wrap 으로 하니까 등호 갯수에 따라 어딜 눌러도 닫히거나, 어딜 눌러도 안닫히거나 하네요,, ㅠ

답변을 작성하시기 전에 로그인 해주세요.
전체 35
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT