jQuery 嵌套点击处理程序

标签 jquery performance events twitter-bootstrap-3

我有以下代表 bootstrap 选项卡元素的标记:

<div id="someDivID">

    <!-- Nav tabs -->
    <ul class="nav nav-tabs" role="tablist">
        <li><a href="#">Tab 1</a></li>
        <li><a href="#">Tab 2</a></li>
        <li><a href="#">Tab 3</a></li>
    </ul>

    <div class="tab-content">
        <div role="tabpanel" class="tab-pane active" id="theTabContent">
        </div>
    </div>
</div>

我在 javascript/jQuery 中绑定(bind)点击事件,如下所示

var $theDiv = $("#someDivId");
$theDiv.on("click", "ul li a", handleClickEvent);

因为选项卡的内容是稍后动态渲染/添加的,所以我将有例如#theTabContent div 内的 bootstrap 下拉列表:(取自文档)

<div class="dropdown">
    <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">Dropdown</button>
    <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
        <li>
            <a href="#">Action</a>
        </li>
        <li>
            <a href="#">Another action</a>
        </li>
        <li>
            <a href="#">Something else here</a>
        </li>
        <li>
            <a href="#">Separated link</a>
        </li>
    </ul>
</div>

由于嵌套的 ul>li>a,在更改下拉列表的值时会调用 handleClickEvent 函数(这显然不是有意的)。 我怎样才能避免这种行为?

两者之间的区别是什么(如果有的话)

$theDiv.on("click", "ul li a", handleClickEvent);

$theDiv.find("ul li a").on("click", handleClickEvent);

显然,第二个(查找)只会捕获制表符 anchor 的有意单击。 抱歉问一下。但是,我不明白这里的意思。

最佳答案

您可以将点击事件限制为仅与选项卡相关的事件:

var $theDiv = $("#someDivId");
$theDiv.on("click", ".nav-tabs", handleClickEvent);

在这种情况下,它不会对下拉列表中的点击使用react。

关于jQuery 嵌套点击处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32901406/

相关文章:

android - 如何提高以下代码的性能?

java - 在哪里可以找到不同 java 容器的性能指标(big-Oh 表示法)?

javascript - 在 Zkoss 中,选定的复选框已设置禁用(true),但我希望复选框和勾选的可见性保持不变

jquery - 如何在上传时禁用页面上的所有按钮?

javascript - jquery 专注于 sibling 而不关注 parent

java - 使用 iFrame 打开新窗口后测试用例运行速度非常慢

c++ - wxButton 不会触发事件。

javascript - 防止事件被不必要地触发

c# - 在 CustomControls 中取消订阅事件的模式

javascript - Sweet Alert 中的 HTML