[jquery] jQuery : 클릭 기능 제외 자식.

jQuery “.not ()”함수를 둘러보고 문제가 발생했습니다. 부모 div를 “클릭 가능”하도록하고 싶지만 사용자가 자식 요소를 클릭하면 스크립트가 호출되지 않습니다.

$(this).not(children()).click(function(){
   $(".example").fadeOut("fast");
});

HTML :

<div class="example">
   <div>
      <p>This content is not affected by clicks.</p>
   </div>
</div>



답변

이렇게하려면 .stopPropagation을 사용 하여 자식 클릭을 중지하십시오 .

$(".example").click(function(){
  $(this).fadeOut("fast");
}).children().click(function(e) {
  return false;
});

이렇게하면 하위 클릭이 해당 수준을 넘어 버블 링되는 것을 막아서 부모가 클릭을받지 못하게됩니다.

.not() 약간 다르게 사용됩니다. 예를 들어 다음과 같이 선택기에서 요소를 필터링합니다.

<div class="bob" id="myID"></div>
<div class="bob"></div>

$(".bob").not("#myID"); //removes the element with myID

클릭에 대한 문제는 실수로 클릭 핸들러를 첨부 한 것이 아니라 자식 클릭이 부모까지 버블 링 된다는 것입니다.


답변

다음 마크 업을 사용하고 있으며 동일한 문제를 권장했습니다.

<ul class="nav">
    <li><a href="abc.html">abc</a></li>
    <li><a href="def.html">def</a></li>
</ul>

여기에 나는 다음과 같은 논리를 사용했습니다.

$(".nav > li").click(function(e){
    if(e.target != this) return; // only continue if the target itself has been clicked
    // this section only processes if the .nav > li itself is clicked.
    alert("you clicked .nav > li, but not it's children");
});

정확한 질문과 관련하여 다음과 같이 작동한다는 것을 알 수 있습니다.

$(".example").click(function(e){
   if(e.target != this) return; // only continue if the target itself has been clicked
   $(".example").fadeOut("fast");
});

또는 물론 다른 방법으로 :

$(".example").click(function(e){
   if(e.target == this){ // only if the target itself has been clicked
       $(".example").fadeOut("fast");
   }
});

희망이 도움이됩니다.


답변

또는 다음을 수행 할 수도 있습니다.

$('.example').on('click', function(e) { 
   if( e.target != this ) 
       return false;

   // ... //
});


답변

내 해결책 :

jQuery('.foo').on('click',function(event){
    if ( !jQuery(event.target).is('.foo *') ) {
        // code goes here
    } 
});


답변

나는 개인적으로 클릭 전파를 멈추는 것 외에는 아무것도하지 않는 자식 요소에 클릭 핸들러를 추가 할 것입니다. 따라서 다음과 같이 보일 것입니다.

$('.example > div').click(function (e) {
    e.stopPropagation();
});


답변

다음은 예입니다. 녹색 사각형은 부모이고 노란색 사각형은 자식 요소입니다.

이것이 도움이되기를 바랍니다.

var childElementClicked;

$("#parentElement").click(function(){

		$("#childElement").click(function(){
		   childElementClicked = true;
		});

		if( childElementClicked != true ) {

			// It is clicked on parent but not on child.
      // Now do some action that you want.
      alert('Clicked on parent');
			
		}else{
      alert('Clicked on child');
    }
    
    childElementClicked = false;
	
});
#parentElement{
width:200px;
height:200px;
background-color:green;
position:relative;
}

#childElement{
margin-top:50px;
margin-left:50px;
width:100px;
height:100px;
background-color:yellow;
position:absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="parentElement">
  <div id="childElement">
  </div>
</div>


답변