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

jQuery如何获取循环生成div的动态id 点击投票按钮总返回相同reviewId怎么解决

问题根本原因

HTML 规范要求页面内所有元素的id属性必须全局唯一,你在foreach循环中重复给每条数据对应的ReviewId、WalletAddress输入框以及按钮设置了相同的id。调用document.getElementById()时,只会返回页面中第一个匹配该id的元素,所以你每次拿到的都是第一条循环数据的reviewId。

解决方法

推荐用HTML5的data-*自定义属性直接把需要的参数绑定到投票按钮上,不需要依赖id获取值,修改方式如下:

1. 调整循环内的HTML输出

删除重复的id,给每个按钮绑定对应数据的参数:

<!-- foreach 循环内 -->
<button class="votess2" 
        data-review-id="<?php echo $id;?>" 
        data-wallet-address="<?php echo $WalletAddress;?>" 
        value="1">
  <img src="<?php echo base_url(); ?>/assets/img/thumb.png" height="40" width="30">
</button>
<button class="votess2" 
        data-review-id="<?php echo $id;?>" 
        data-wallet-address="<?php echo $WalletAddress;?>" 
        value="0">
  <img src="<?php echo base_url(); ?>/assets/img/thumbdown.png" height="40" width="30">
</button>
<!-- foreach 循环结束 -->

注:上面的$id、$WalletAddress替换成你实际循环中读取对应字段的PHP代码即可。

2. 修改jQuery点击事件逻辑

通过$(this)获取当前被点击的按钮,直接读取绑定在按钮上的参数:

$(document).ready(function(){   
    $(".votess2").click(function() {   
        var WalletAddress = $(this).data('wallet-address');
        var ReviewId = $(this).data('review-id');
        var voteValue = $(this).val(); // 1为点赞,0为点踩
        alert(ReviewId);
        // 此处添加你的AJAX请求逻辑即可
    });
});

可选替代方案

如果你每条数据对应一个独立的<form>标签,也可以不绑定data属性,直接从当前按钮所属的表单中读取对应字段值,前提是表单内的输入框设置了正确的name属性(不需要id):

$(".votess2").click(function() {
  let currForm = $(this).closest('form');
  let ReviewId = currForm.find('input[name="ReviewId"]').val();
  let WalletAddress = currForm.find('input[name="WalletAddress"]').val();
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:09:01