2013-07-31 3 views
0

코드 :왜이 스크립트는 한 번의 클릭이 아닌 두 번 클릭에서만 작동합니까?

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script> 
<script> 
$(document).ready(function() { 

$('.click1').click(function() { 
    $(".show1").fadeIn(400); 
}); 

$('body, .click1').click(function() { 
    $('.show1').hide(); 
}); 
}); 
</script> 

작품 이상하지만, 그것이 두 번 클릭해야하는 fadeIn을하기 위해서는 스크립트. 한 번 클릭 할 때 표시되도록 변경하려면 어떻게해야합니까?

+0

시도의 $ ('. click1')을 클릭합니다. (함수()가() { $()는 "show1이."숨길 fadeIn (400).. }); –

답변

1

, 당신은 때를 위해 듣고 클릭은 페이지의 아무 곳에서나 일어납니다). 해당 이벤트가 발생하면 구체적으로 클릭 한 항목 (evt.target)을 볼 수 있고 거기에서 조건부로 기능을 실행할 수 있습니다.

http://codepen.io/snypelife/pen/Fcjiw

$(function() { 

     $('body').on('click', function (evt) { 
     if($(evt.target).hasClass('click')){ 
      $('.show').toggle('fade'); 
     } else { 
      $('.show').fadeOut(); 
     } 
     }); 

}); 
+0

고맙지 만 멀리 클릭하면 작동하지 않습니다. – starbucks

+0

게시 한 사람이 다른 사람을 클릭하면 숨기지 않습니다. – starbucks

+0

내가 만든 펜을 업데이트했습니다. 목표가 처음에는 무엇인지 확신 할 수 없었지만 지금은 당신이 무엇인지 이해합니다. – snypelife

0

click 이벤트 (대부분의 다른 이벤트)는 부모 요소에 버블 링합니다. 이것은 '.click1'요소를 클릭 할 때이 요소에서 먼저 트리거 된이 이벤트가 '본문'에서 트리거된다는 것을 의미합니다. 그리고 'body'의 이벤트 리스너는 즉시 요소를 숨 깁니다. 당신은 이벤트 버블 링 방지하기 위해 여기에) Event.stopPropagation을 (사용할 수 있습니다 :이 경우 문서 (의 본체에 이벤트 리스너를 적용 할 수 있습니다, 사용 사례를 들어

$('.click1').click(function (e) { 
    $(".show1").fadeIn(400); 
    e.stopPropagation(); 
}); 

$('body').click(function() { 
    $('.show1').hide(); 
}); 
+0

감사! 나는 그것을 사용했지만이 오류가 발생했습니다 : ReferenceError : e가 정의되어 있지 않습니다 오류 소스 줄 : \t e.stopPropagation(); – starbucks

+0

@starbucks 클릭 핸들러 함수의 첫 번째 매개 변수로 'e'를 전달하는지 확인하십시오. – nullability

+0

나는 그것을 당신이 가진 방식대로 복사했습니다. 그게 옳은가? – starbucks

관련 문제