[英]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.