javascript - 在点击功能上运行 jQuery,但不在孩子上运行
问题描述
我click
在 jQuery 变量上有一个事件处理程序rangeCont
。这是一个<div>
带着几个孩子的。当用户单击它时,我希望事件处理程序能够工作,但不希望它包含的一个具有“拇指”类的孩子工作。
当我单击拇指时,控制台e.target
中是span.thumb
. 条件在选择器中不起作用:not
还是我做错了什么?
const rangeCont = $('<div class="range-slider"></div>'),
track = $('<span class="track">track</span>');
progressTrack = $('<span class="progress-track">progress</span>'),
thumbHigh = $('<span class="thumb">thumb</span>');
rangeCont.append(track);
progressTrack.append(thumbHigh);
rangeCont.append(progressTrack);
$('body').append(rangeCont);
rangeCont.on('click', ':not(.thumb)', function(e) {
console.log(e.target);
});
span {
margin: 0 1em;
background-color: rgba(0, 0, 0, 0.2);
}
.range-slider {
background-color: rgba(0, 0, 0, 0.2);
padding: 1em 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
编辑:引号对:not
. 我注意到e.target
is span.thumb
but e.currentTarget
isspan.progress-track
在拇指下方,如果这很重要的话。
解决方案
您可以直接检查事件的 e.target 并添加一个条件,以确保点击在正确的目标上。
该事件仍将引发,但您可以在不触及传播的情况下取消它。
$('#rangeCont').on('click', function(e) {
if ($(e.target).is('.thumb'))
return;
console.log(e.target);
});
推荐阅读
- c - 使用 openssl 中间证书连接到 AWS MQTT 代理
- python - torch.nn.BCELoss() 的两个参数中的导数
- java - 在同一个项目中使用 jpa 存储库和休眠(使用条件调用查询,HQL)可以吗
- android - 如何修复数据绑定中的以下错误?
- typescript - 类型“字符串”不能用于索引类型“未知”|| 或如何让打字稿分配 Type[key] = SameType[key]
- sendbird - 会话令牌的 SendBird 组频道权限
- python - 隔离相似颜色的单个区域的最佳方法是什么?
- apache-pulsar - Pulsar 如何在账本中存储多个主题的消息?
- azure - 如何将 JSON 对象数组作为自定义策略中的输入声明传递给 REST API
- python - 在没有焦点的情况下在 tkinter 中监视按键