首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >停止在特定元素上的传播

停止在特定元素上的传播
EN

Stack Overflow用户
提问于 2017-12-11 17:00:03
回答 3查看 1.8K关注 0票数 2

我有一个下拉菜单在一个头部使用引导带data-toggle="dropdown"。单击“下拉”按钮时,应该会出现一个列表。当您单击标题时,内容应该上下滑动。

问题是,当我单击下拉按钮时,它也会触发标题。这里通常的答案是e.stopPropagation,但是当我使用它时,它也会阻止下拉菜单的出现。

如何防止下拉按钮触发标题?

代码语言:javascript
运行
复制
<div id="top">
  <div class="dropdown">
    <button type="button" class="dropdown-toggle" data-toggle="dropdown">
      Show List
    </button>
    <ul class="dropdown-menu">
      <li>Some Item</li>
      <li>Some Item</li>
      <li>Some Item</li>
    </ul>
  </div>
</div>
<div id="content" class="collapse">
  This is the actual content
</div>

JS

代码语言:javascript
运行
复制
// CANNOT USE BOOTSTRAP DATA-TARGET !
$('#top').click(function() {
  $('#content').collapse('toggle')
})
$('button').click(function(e) {
  //e.stopPropagation();
})

我准备了一个小提琴来说明这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-11 17:06:46

相反,您应该过滤有关单击event.target#top元素:

代码语言:javascript
运行
复制
$('#top').click(function(e) {
  if($(e.target).closest('button[data-toggle], .dropdown-menu').length) return;
  $('#content').collapse('toggle')
})

-jsFiddle-

票数 2
EN

Stack Overflow用户

发布于 2017-12-11 17:13:39

你也可以这么做。

代码语言:javascript
运行
复制
// CANNOT USE BOOTSTRAP DATA-TARGET !
$('#top').click(function(e) {
    if(e.target.type != "button"){
      $('#content').collapse('toggle')
  } 
})
$('button').click(function(e) {
  //e.stopPropagation();
})
票数 0
EN

Stack Overflow用户

发布于 2017-12-11 17:29:20

另一种方法是使用e.target来确定单击元素是否为#top

代码语言:javascript
运行
复制
$('#top').click(function(e) {
   if(e.target.id=="top"){
        $('#content').collapse('toggle')
   } 
})
$('button').click(function(e) {
  //e.stopPropagation();
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47757738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档