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

如何在jQuery中获取按钮的动态ID?代码无法运行求助

问题描述

我写了下面这段HTML代码:

<ul class="dropdown-menu"> 
<li><button type="button" id="1" class="highlight"> Edit </button> </li>
<li><button type="button" id="2" class="highlight"> Edit </button> </li>
<li><button type="button" id="3" class="highlight"> Edit </button> </li>
<li><button type="button" id="4" class="highlight"> Edit </button> </li>
...............................

<li><button type="button" id="100" class="highlight"> Edit </button> </li>
</ul>

我想用jQuery获取点击按钮的ID,但这段代码没法正常工作:

$('.highlight').on('click', function(e){
     var id = $(this).attr('id');
     alert(id); 
});

补充说明:我加了个代码片段证明代码本身是没问题的:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul class="dropdown-menu">
  <li><button type="button" id="1" class="highlight"> Edit </button> </li>
  <li><button type="button" id="2" class="highlight"> Edit </button> </li>
  <li><button type="button" id="3" class="highlight"> Edit </button> </li>
  <li><button type="button" id="4" class="highlight"> Edit </button> </li>
  <li><button type="button" id="100" class="highlight"> Edit </button> </li>
</ul>
$('.highlight').on('click', function(e) {
  var id = $(this).attr('id');
  console.log(id);
});

解决方法

问题根源在于事件绑定时机:如果这些按钮是通过JS动态生成(比如循环渲染、异步加载后添加到DOM)的,你直接给.highlight绑定点击事件时,这些元素还没被创建,事件自然绑定不上。而静态代码片段能正常工作,是因为DOM加载完成后元素已经存在,事件能直接绑定。

解决这个问题的核心是使用事件委托:把点击事件绑定到一个已经存在的父级元素(比如.dropdown-menu)上,让父元素监听子元素的点击事件,这样不管子元素是一开始就有还是后来动态添加的,都能触发事件。

修改后的代码如下:

// 绑定到父级静态元素 .dropdown-menu
$('.dropdown-menu').on('click', '.highlight', function(e){
    var id = $(this).attr('id');
    alert(id);
});

或者用更高效的原生JS方式获取ID:

$('.dropdown-menu').on('click', '.highlight', function(e){
    alert(this.id);
});

这样修改后,不管按钮是静态存在还是动态生成的,点击时都能正确获取到对应的ID了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:05:21