gpt4 book ai didi

jquery - hide.bs.dropdown 事件来源/目标?

转载 作者:行者123 更新时间:2023-12-04 11:15:51 26 4
gpt4 key购买 nike

传递给 hide.bs.dropdown 处理程序的 event.target 是下拉列表本身,而不是启动事件的元素。

如何从 hide.bs.dropdown 事件对象获取启动事件的元素?

<div class="dropdown" id='drop'>
<button id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown trigger
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
...
</ul>
</div>
<button class='btn btn-primary'>Other Button</button>

Javascript:
$('#drop').on('hide.bs.dropdown', function(e) {
console.log(e.target); //
})

打开下拉菜单,单击按钮,查看 console.log 目标。
JSFiddle: http://jsfiddle.net/DTcHh/4215/

如果可能的话,我不希望将点击事件绑定(bind)到整个页面。

我试图阻止在我的文档上单击某些元素时关闭下拉菜单。

更新

我最终使用了这种方法: https://stackoverflow.com/a/19797577/2414886但是我仍然希望有一个更紧凑的解决方案。

最佳答案

这是一个古老的问题,从我看到的 Bootstrap 3 发布的内容来看。我仍然发布我的用例,以防它今天对其他人有所帮助。
我对我一直在研究的 bootstrap 4.5 下拉菜单有类似的要求。我需要一些下拉菜单项处于非事件/禁用状态,因此单击它们不会导致下拉菜单关闭。我设法通过利用 hide.bs.dropdown 事件的 clickEvent 属性解决了这个问题。 clickEvent 属性保存原始点击事件的事件对象。所描述的用例在可以使用相同方法解决的意义上是相似的。
这是一个 jsfiddle 使用 clickEvent 属性来确定触发点击事件的原始元素并有条件地保持下拉菜单打开。在这种情况下,它是页面某处的按钮,与下拉菜单无关。
https://jsfiddle.net/oc2bdmvr/
基于 Bootstrap 文档:
https://getbootstrap.com/docs/5.0/getting-started/download/

"hide.bs.dropdown and hidden.bs.dropdown events have a clickEventproperty (only when the original Event type is click) that contains anEvent Object for the click event."


对于我的特定用例,我使用 JQuery 来解析 DOM 并确定被单击的下拉项是否应该导致关闭下拉菜单。我的下拉项也比列表项更复杂,即它们是包含子对象的面板,其中任何一个都可能触发鼠标单击事件。我在下面粘贴了一个对我有用的代码片段。这是相同的 jsfiddle 链接: https://jsfiddle.net/z6gyjaps/

$(".dropdown").on("hide.bs.dropdown", function(e) {

if (e && e.clickEvent && e.clickEvent.target) {
let target = $(e.clickEvent.target);
if (!target.hasClass("dropdown-item")) {
// This is useful when your drop down items container complex hierarchies.
// JQuery parents() will find the first ancestor in the DOM hierarchy using some selector.
target = target.parents(".dropdown-item");
}

if (target.length > 0 && target.hasClass("inactive")) {
return false;
}
}

return true;
});
.dropdown-item-header {
font-weight: bold;
}

.dropdown-item-content {
margin: 20px;
}

.dropdown-item.inactive {
cursor: default !important;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet"/>
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenu2" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu2">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item inactive" type="button">Disabled action</button></li>
<li>
<div class="dropdown-item inactive">
<div class="dropdown-item-header">
Some Disabled complex item
</div>
<div class="dropdown-item-content">
Some contrent
</div>
</div>
</li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>

关于jquery - hide.bs.dropdown 事件来源/目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28458888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com