如果点击console.log
,我需要.overtitle
,但不包括内部的复选框。如果单击复选框,我需要选中/取消选中它,而不是console.log
。
这是我尝试过的,但它不起作用。点击该复选框可触发console.log
。
$('.overtitle').not('.checkpart').click(function() {
console.log('323');
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='overtitle'>
<input class='checkpart' type="checkbox" name="part" value="banner00">
BANNERS
</div>
&#13;
答案 0 :(得分:3)
如果您点击该复选框,您也始终点击.overtitle
。对此的一个解决方案是在event.target
$('.overtitle').click(function(event){
if(event.target.className == 'checkpart') {
return;
}
console.log('323');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='overtitle'>
<input class='checkpart' type="checkbox" name="part" value="banner00">BANNERS</div>
&#13;
答案 1 :(得分:2)
Theres有几种方法可以做到这一点。
首先,您可以使用e.target
属性来检查实际点击了哪个元素:
$('.overtitle').click(function(e) {
if (!$(e.target).is('.checkpart')) {
console.log('323');
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="overtitle">
<input class="checkpart" type="checkbox" name="part" value="banner00">
BANNERS
</div>
&#13;
或者,您可以在复选框上放置一个单独的事件处理程序,以阻止事件向上传播:
$('.overtitle').click(function(e) {
console.log('323');
});
$('.overtitle .checkpart').click(function(e) {
e.stopPropagation();
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="overtitle">
<input class="checkpart" type="checkbox" name="part" value="banner00">
BANNERS
</div>
&#13;
最后,您可以将文本包装在label
元素中,并仅将事件附加到该元素:
$('.overtitle label').click(function(e) {
console.log('323');
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="overtitle">
<input class="checkpart" type="checkbox" name="part" id="part" value="banner00">
<label for="part">BANNERS</label>
</div>
&#13;
答案 2 :(得分:2)
使用event.stopPropagation()
方法防止事件冒泡到DOM树的复选框。
$('.overtitle').click(function() {
console.log('323');
}).find('.checkpart').click(function(e) {
e.stopPropagation();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='overtitle'><input class='checkpart' type="checkbox" name="part" value="banner00">BANNERS</div>
或者检查event.target
元素(传播事件)不是复选框。
$('.overtitle').click(function(e) {
if ($(e.target).is(':not(.checkpart)'))
console.log('323');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='overtitle'><input class='checkpart' type="checkbox" name="part" value="banner00">BANNERS</div>
答案 3 :(得分:1)
你必须为每个事件编写两个独立的事件处理程序,如
$(document).on('click','.overtitle',function(e) {
console.log('323');
});
$(document).on('click','.checkpart',function(e) {
e.stopPropagation();
});
stopPropagation()
阻止执行该元素的父元素的任何事件处理程序