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
相关产品推荐
相关产品推荐

