javascript - 单击卡片内的特定元素
问题描述
我有一个示例卡片,里面有一个按钮。当我点击卡片时,会出现一个日志,表明卡片被点击,但是当我点击按钮时,会出现一条日志消息,表明我点击了卡片和按钮。
它应该只在单击按钮时显示按钮的日志消息。不是卡。
如何处理这个问题?
$('.cards-trigger').on('click', function(){
console.log('cards-trigger')
});
$('.button-trigger').on('click', function(){
console.log('button-trigger')
});
$('.cards').on('click', function(e){
e.stopPropagation();
$(this).siblings().trigger('click')
});
$('.add-button').on('click', function(e){
e.stopPropagation();
$(this).siblings().trigger('click')
});
.cards{
padding:20px;
background-color:grey;
}
.hidden{
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="cards">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolore, molestias.</p>
<button class="add-button">Add</button>
<button class="hidden button-trigger">BT</button>
</div>
<button class="hidden cards-trigger">CT</button>
解决方案
通过单击按钮,您也可以单击卡片。首先为按钮引发事件,然后为卡片引发事件(依此类推,直到正文和 html)。如果您不希望事件传播,请添加 event.stopPropagation() ,例如:
$('#buttonAdd').on('click', function(e){
e.stopPropagation();
console.log('click the button')
})
请注意,我已将事件参数 (e) 添加到您的函数中。
推荐阅读
- javascript - 为什么我的跨度在滚动时不改变颜色
- postgresql - 为什么 Kubernetes 服务外部名称无法在 Internet 上访问?
- azure - Azure APIM 中的 JWT 验证失败
- java - 我们如何模拟 OutOfMemory: Metaspace?
- pine-script - 避免连续的买入和卖出信号(我检查了所有以前避免 AA 和 BB 相关的问题,但无法解决我的问题)
- swift - 用curve25519加密[String:Any]
- python - BeautifulSoup 确实错误地过滤掉了文本
- javascript - 使用 Fontsource 加载自托管字体时如何避免链接关键请求?
- c - 赋值后如何将分配的内存释放给指针数组?
- java - 如何重构一个可以有两个流的类