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

jQuery多点击事件问题:点击不同按钮却打开同一下拉菜单

搞定独立下拉菜单的小问题

嘿,我完全懂你现在的困扰——两个按钮点了都弹出同一个下拉框,对吧?核心原因其实很简单:你在HTML里重复使用了同一个ID target,HTML规范里ID必须是页面唯一的,所以jQuery用$('#target')选择元素时,只会找到第一个匹配的那个,自然两个按钮都控制它啦。

别担心,给你两种解决方案,从简单到灵活,你可以选适合自己的:

方案一:快速修复(用唯一ID)

这个方案最直接,不用改太多代码:

  1. 把第二个下拉框的id="target"改成id="target2"
  2. 修改jQuery里的toggle2函数,让它控制#target2

修改后的JS代码:

$('.Show').click(function() { $('#target').show(500); $('.Show').hide(0); $('.Hide').show(0); });
$('.Hide').click(function() { $('#target').hide(500); $('.Show').show(0); $('.Hide').hide(0); });
$('.toggle').click(function() { $('#target').slideToggle(1000); });
$('.toggle2').click(function() { $('#target2').slideToggle(1000); });

这个方法适合快速解决问题,但如果以后要加更多下拉菜单,就得一直加新的函数,有点麻烦。

方案二:更灵活的通用写法(推荐)

我们可以用类选择器+相对定位的方式,让代码一次写好,以后加多少下拉菜单都不用改JS:

第一步:修改HTML,统一类名

把所有下拉框的id="target"改成通用类dropdown-content,按钮统一用toggle类(去掉toggle2):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.11/p5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.11/addons/p5.dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.11/addons/p5.sound.min.js"></script>
<link href='https://fonts.googleapis.com/css?family=Lato' rel='stylesheet'>
<style>
body { font-family: 'Lato';font-size: 14px; }
</style>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<script src="sketch.js"></script>
<div style="width: 100%; overflow: hidden;">
  <div style="width: 600px; float: left; padding-left:20px; padding-top:50px;">
    <div style="font-size:30px; padding-bottom:20px "> JANUARY 2018 </div>
    <button class="toggle button" style="color:rgb(211, 233, 255)">WEEK 1</button>
    <div class="dropdown-content">
      <div style="list-style-type:none; width:420px; padding-left:20px">
        <li> MONDAY 1ST </li>
        <li> TUESDAY 2ND </li>
        <li> WEDNESDAY 3RD </li>
        <li> THURSDAY 4TH </li>
        <li> FRIDAY 5TH </li>
        <li> SATURDAY 6TH </li>
        <li> SUNDAY 7TH </li>
      </div>
    </div>
  </div>
  <div style="width: 100%; overflow: hidden;">
    <div style="width: 600px; float: left; padding-left:20px; padding-top:50px;">
      <button class="toggle button" style="color:rgb(211, 233, 255)">WEEK 2</button>
      <div class="dropdown-content">
        <div style="list-style-type:none; width:420px; padding-left:20px">
          <li> MONDAY 8TH </li>
          <li> TUESDAY 9TH </li>
          <li> WEDNESDAY 10TH </li>
          <li> THURSDAY 11TH </li>
          <li> FRIDAY 12TH</li>
          <li> SATURDAY 13TH </li>
          <li> SUNDAY 14TH </li>
        </div>
      </div>
    </div>
</body>
</html>

第二步:修改CSS,把#target改成.dropdown-content

html, body { margin: 0; padding: 0; }
.dropdown-content { 
  width:500px; 
  height:160px; 
  padding:5px; 
  display:none; 
}
.Hide { display:none; }
.button { font-size: 22px; border: none; }

第三步:简化jQuery代码,用相对选择器

// 所有toggle按钮共用一个点击事件
$('.toggle').click(function() {
  // $(this)就是当前点击的按钮,next()找它后面紧邻的下拉框
  $(this).next('.dropdown-content').slideToggle(1000);
});

// 如果还要保留Show/Hide按钮的逻辑,也可以用同样的思路
$('.Show').click(function() {
  $(this).next('.dropdown-content').show(500);
  $(this).hide(0);
  $(this).siblings('.Hide').show(0);
});

$('.Hide').click(function() {
  $(this).prev('.dropdown-content').hide(500);
  $(this).hide(0);
  $(this).siblings('.Show').show(0);
});

为什么推荐方案二?

  1. 符合HTML规范:不用重复ID,避免潜在的bug
  2. 代码更简洁:不用为每个按钮写单独的函数,维护起来省心
  3. 扩展性强:以后加Week3、Week4,只要复制HTML结构,JS和CSS完全不用改

作为jQuery新手,这种相对选择器的思路很实用,以后处理类似的“按钮对应相邻元素”的场景都能用得上~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:36:37