테스트 사이트 - 개발 중인 베타 버전입니다

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

sooable 3년 전 조회 31,969

 

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

 

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

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

 

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

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

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

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

 

</p>

<p>function slideMenuOpen(){

  $('.slide_menu_wrap').addClass('on');

}</p>

<p>$(function(){</p>

<p>        $('.slide_menu_wrap.on').on('click', function(e) { 

            

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

               return false;

            }else{

                $('.slide_menu_wrap').removeClass('on');

            }</p>

<p>    });</p>

<p>});</p>

<p> </p>

<p>

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
하틴
3년 전

</p>

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

<p>

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

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

다시 살릴때는

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

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

자식선택하는 법을 찾아봐야겠어요 큰 도움 되었네요 감사합니다!
s
sooable
3년 전
slide_menu를 클릭했을때, slide_wrap을 클릭했을때로 나눠서 작성해주었더니 잘 작동됩니다 감사합니다!!
지식인이면 내공 드리고 싶을 정도로 감사해요 ㅠㅠ

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

});

$('.slide_menu_wrap').click(function(){

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

});
[/code]
하틴
3년 전
ㅎㅎㅎ 도움이되셨다니 다행이네요 ㅋㅋㅋ
그러면 제 답변을 채택해주시면 될 것 같습니다!^^
s
sooable
3년 전
채택하였습니다!

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

[code]
$('.slide_menu_wrap').click(function(){

$('.slide_menu').click(function(){
return false;
$('.slide_menu a').click(function(){
event.preventDefault();
});
});
$(this).removeClass('on');
});
[/code]

이런 식으로 쓰면 무리수일까요?..
해결됐다고 생각했는데 새로운 문제에 직면하니 멘붕이네요...
하틴
3년 전
음 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(){
});
이런식으로..
안그러면 제일 상위 클릭이 안되면 그 안에있는 얘들은 실행조차 안되니까요!
s
sooable
3년 전
해결되었습니다 감사합니다!!

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

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

$('.slide_menu a').click(function(){
event.stopPropagation();
});
[/code]

댓글을 작성하려면 로그인이 필요합니다.

sooable
3년 전

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

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

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

 

</p>

<p> </p>

<p>        $('.slide_menu_wrap.on').on('click', function(e) { 

            

            if( $(e.target) == $('.slide_menu') ){ 

               return false;

            }else{

                $('.slide_menu_wrap').removeClass('on');

            }</p>

<p>        });</p>

<p> </p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

댓글을 작성하려면 로그인이 필요합니다.

3년 전

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인