You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

下拉菜单交替点击显隐异常,第三次点击重复展开,如何恢复默认结构?

解决下拉菜单重复展开的问题

兄弟,你的这个问题我太熟了!大概率是每次点击都在重复生成/追加下拉列表内容,而不是单纯切换已有列表的显示/隐藏状态,所以第三次点击就多出了一份下拉项。另外也有可能是点击事件被重复绑定,导致一次点击触发多次操作。下面给你几个靠谱的修复方案:

方案1:用jQuery的toggle()直接切换显示隐藏(最省心)

如果你的下拉菜单是已经提前写在DOM里的,只是默认隐藏,那直接用toggle()方法就能实现点击切换,完全不会出现重复的问题:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
/* 默认隐藏下拉列表 */
.dropdown-list {
    display: none;
    margin: 10px 0;
    padding-left: 20px;
}
</style>
</head>
<body>
<button class="dropdown-btn">点击展开/收起菜单</button>
<ul class="dropdown-list">
    <li>菜单选项1</li>
    <li>菜单选项2</li>
    <li>菜单选项3</li>
</ul>

<script>
// 只绑定一次点击事件,切换列表的显示与隐藏
$('.dropdown-btn').on('click', function() {
    $('.dropdown-list').toggle();
});
</script>
</body>
</html>

方案2:动态生成时避免重复创建

如果你的下拉列表是需要动态生成的,那每次点击前先检查列表是否已经存在:存在就切换显示,不存在再创建新的,这样就不会重复生成了:

$('.dropdown-btn').on('click', function() {
    var $targetList = $('.dropdown-list');
    // 检查列表是否已存在
    if ($targetList.length === 0) {
        // 不存在就创建新列表并插入到按钮后面
        var newDropdown = $('<ul class="dropdown-list"><li>动态选项1</li><li>动态选项2</li></ul>');
        $(this).after(newDropdown);
    } else {
        // 已存在就切换显示状态
        $targetList.toggle();
    }
});

方案3:解决重复绑定事件的问题

如果是因为代码被重复执行(比如在某个循环里绑定事件),导致同一个按钮被绑定了多次点击事件,那可以先解绑再绑定,确保每次只有一个事件生效:

// 先解绑之前的点击事件,再绑定新的
$('.dropdown-btn').off('click').on('click', function() {
    $('.dropdown-list').toggle();
});

核心思路就是:不要每次点击都生成新的下拉内容,要么提前写好DOM只切换显示,要么动态生成时做存在性检查,同时避免事件重复绑定。

内容的提问来源于stack exchange,提问作者Faizal Hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:20:19