简体   繁体   English

jQuery 点击时排除特定元素

[英]jQuery on click exclude a specific element

I want to disable clicks on certain elements within a parent div with jQuery.我想使用 jQuery 禁用对父 div 中某些元素的点击。 How can it be done?怎么做到呢?

My approach was to try to exclude it from selection:我的方法是尝试将其排除在选择之外:

 $('.wrap1:not(.wrap3 li)').on("click", function() { alert(1); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrap1"> <div class="wrap2"> <p>Some text</p> <ul> <li>list 1</li> <li>list 2</li> <li>list 3</li> </ul> </div> <div class="wrap3"> <ul> <li>Should not be clickable</li> </ul> </div> </div>

The result that I'm looking for is: if I click inside the wrap1 div, it should prompt me the alert box, except when I click inside the wrap3 div.我正在寻找的结果是:如果我在wrap1 div 内单击,它应该提示我警报框,除非我在wrap3 div 内单击。

What am I missing here?我在这里想念什么?

Your best bet is checking the event's target.您最好的选择是检查事件的目标。

$('.wrap1').on("click", function(e){
  if(!$(e.target).is(".wrap3, .wrap3 *")){
    alert(1);
  }
})

 $('.wrap1').on("click", function(e){ if(.$(e.target).is(",wrap3. ;wrap3 *")){ alert(1); } })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrap1"> <div class="wrap2"> <p>Some text</p> <ul> <li>list 1</li> <li>list 2</li> <li>list 3</li> </ul> </div> <div class="wrap3"> <div style="border: 1px solid red;"> ABC <div style="background-color:dodgerblue;"> CDE </div> </div> <ul> <li>Should not be clickable</li> </ul> </div> </div>

there is no need of function keyword in arrow function箭头中不需要function关键字 function

 $('.wrap1:not(.wrap3 li)').on("click", e => { e.stopPropagation(); alert(1); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrap1"> <div class="wrap2"> <p>Some text</p> <ul> <li>list 1</li> <li>list 2</li> <li>list 3</li> </ul> </div> <div class="wrap3"> <ul> <li>Should not be clickable</li> </ul> </div> </div>

Not sure why your way doesn't work, but this does:不知道为什么你的方式不起作用,但这确实:

 $('.wrap1 li').not('.wrap3 li').on("click", (e) => { e.stopPropagation(); alert(1); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrap1"> <div class="wrap2"> <p>Some text</p> <ul> <li>list 1</li> <li>list 2</li> <li>list 3</li> </ul> </div> <div class="wrap3"> <ul> <li>Should not be clickable</li> </ul> </div> </div>

Use event.stopPropagation()使用event.stopPropagation()

jQuery Stop Propagation jQuery 停止传播

<script>
    
$('.wrap1').on("click", function(){
  alert(1);
});

$(".wrap3").on("click", function(event){
  // This will stop propagation of the event to parent element.
  event.stopPropagation(); 
});
    
</script>

This should do it!这应该做!

 $('.wrap1').on("click", function(e) { if( $(e.target).is('.wrap3 li') ) { return false; } alert(1); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="wrap1"> <div class="wrap2"> <p>Some text</p> <ul> <li>list 1</li> <li>list 2</li> <li>list 3</li> </ul> </div> <div class="wrap3"> <ul> <li>Should not be clickable</li> </ul> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM