我的 ajax 代码仅从一组隐藏输入中获取一个值

My ajax code get only one value from a group of hidden inputs

所以基本上我有这个 html 文档,由 php 代码 (foreach) 动态生成,提取不同评论的行(每个作者有不同的用户 ID),我存储了 cid(评论的id)和uid(评论作者的用户id)在一组隐藏输入中:

hidusr = 授权 ID

<?php foreach ($comments as $comment) : ?>

                                    

                                    <a href="javascript:void(0);" class="banusr"
                                        class="btn btn-info btn-link pull-right "> <i class="fa fa-ban"></i>
                                        Ban</a>

                                    <input type="hidden" class="hidden" id="hidusr" name="uid"
                                        value="<?php echo trim(htmlspecialchars($comment['idauth'])) ?>" />
                                <p><?php echo htmlspecialchars($comment['text']); ?></p>
        <?php endforeach; ?>

所以网页中的结果是这样的:

<a href="utenti.php?id=2"> Author Name  </a>
    <a href="javascript:void(0);" class="banusr"  class="btn btn-info btn-link pull-right "> <i class="fa fa-ban"></i>
                                            Ban</a>
                                      
     <input type="hidden" class="hidden" id="hidusr" name="uid" value="2" />

<a href="utenti.php?id=9"> Other Author Name  </a>
    <a href="javascript:void(0);" class="banusr"  class="btn btn-info btn-link pull-right "> <i class="fa fa-ban"></i>
                                            Ban</a>
                                      
     <input type="hidden" class="hidden" id="hidusr" name="uid" value="9" />

现在我有一些 javascript/jquery 代码来管理这个,在单击 Ban 按钮时,ajax 获取 hidusr 参数(因此该评论的作者)并将请求发送到 php 禁止该用户的页面,摘录:

$(document).ready(function() {
    bans = $(".banusr");

        for (var i = 0; i < bans.length; i++) {

            ban = bans[i];

            ban.onclick = function(e) {

                    uid = $("#hidusr").val();

                    $.ajax({
                        method: "POST",
                        url: "./ajax/ban.php?post",
                        data: {
                            
                            usr_uid: uid
                        }
});

但不知道为什么,如果你在评论区开始从上到下禁止用户,没关系,代码取正确的id。

所以我从上开始首先禁止: Ajax 在 Headers 中的响应: usr_uid: 2 然后我下去,点击ban: Ajax response in Headers: usr_uid 9

但是,如果我从下方单击,例如:我按 Ban 以获取最后一条评论(“其他作者姓名”,hidusr:9)Ajax Headers 中的响应:usr_uid 2

任何人都知道如何解决这个问题,在此先感谢

首先,考虑您的 PHP 如何构建页面。它正在为 HTML 设置 ID,因此您的循环应该创建唯一 ID。

<?php 
$i = 1;
foreach ($comments as $comment) {
?>
<a href="#" class="banusr" class="btn btn-info btn-link pull-right ">
  <i class="fa fa-ban"></i> Ban
</a>
<input type="hidden" class="hidden" id="hidusr-<?php echo $i; ?>" name="uid[]" value="<?php echo trim(htmlspecialchars($comment['idauth'])) ?>" />
<p><?php echo htmlspecialchars($comment['text']); ?></p>
<?php
$i++;
}
?>

现在每个 ID 都是唯一的:hiduser-1、hiduser-2 等...

我还更新了 name 属性,以便在提交表单时收集所有这些,name="uid[]"

现在您的 HTML 看起来像:

<a href="#" class="banusr" class="btn btn-info btn-link pull-right ">
  <i class="fa fa-ban"></i> Ban
</a>
<input type="hidden" class="hidden" id="hidusr-1" name="uid[]" value="2" />
<a href="#" class="banusr" class="btn btn-info btn-link pull-right ">
  <i class="fa fa-ban"></i> Ban
</a>
<input type="hidden" class="hidden" id="hidusr-2" name="uid[]" value="9" />

所以现在我们可以看看 JavaScript。

$(function() {
  $(".banusr").click(function(event){
    event.preventDefault();
    var uid = $(this).next("input").val();
    $.ajax({
      method: "POST",
      url: "./ajax/ban.php?post",
      data: {
        usr_uid: uid
      }
    });
  });
});

由此,我们将 click 事件回调绑定到所有 Ban link。使用 this,我们可以 select 下一个 input 元素,相对于被单击的 link。

查看更多:

在我看来,似乎没有必要在 input 中隐藏 ID。我只是将它放在 Link 本身。

<?php 
foreach ($comments as $comment) {
?>
<a href="<?php echo trim(htmlspecialchars($comment['idauth'])) ?>" class="banusr" class="btn btn-info btn-link pull-right ">
  <i class="fa fa-ban"></i> Ban
</a>
<p><?php echo htmlspecialchars($comment['text']); ?></p>
<?php
}
?>

然后您可以简单地计算 jQuery:

$(function() {
  $(".banusr").click(function(event){
    event.preventDefault();
    $.ajax({
      method: "POST",
      url: "./ajax/ban.php?post",
      data: {
        usr_uid: $(this).attr("href")
      }
    });
  });
});