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

PHP循环中评论及ID传递至JQuery再返回PHP的异常排查

问题分析与解决方案

嘿,我一眼就发现问题所在了——你在循环里给所有textarea重复使用了同一个ID comment1!HTML里ID是全局唯一的标识,当你用$("#comment1").val()时,jQuery只会找到页面上第一个带这个ID的元素,所以后面的按钮点击时,拿到的永远是第一个textarea的值(如果第一个是空的,就会提交空评论),这就是为什么只有第一张图片的评论能正常提交,其他的只能传ID的原因。

下面是具体的修复步骤和代码:

1. 修正PHP代码:移除重复ID,添加评论容器(可选但推荐)

首先,删掉循环里textarea的id='comment1',我们不需要用ID来定位它。另外给每个评论区域加一个父容器,方便后续通过DOM结构精准找到对应元素:

<?php
$go="SELECT * FROM images WHERE images.title='$my_course' && images.type!='tutorials'";
$gresult= mysqli_query($conn, $go);
if(mysqli_num_rows($gresult) > 0){
    while($frow= mysqli_fetch_assoc($gresult)){
        $imggd=$frow['id'];
        // 给每个评论组加容器,方便定位
        echo"<div class='comment-group'>"
        ."<textarea name='comment' placeholder='write...'></textarea>"
        ."<button type='submit' name='commentbtn' class='comment1' value='$imggd'>"
        ."<span class='fab fa-telegram-plane'></span>"
        ."</button>"
        ."</div>"
        ."<br/>";
    }
}
?>

2. 修正jQuery代码:通过相对DOM结构获取对应评论内容

不再依赖ID选择器,而是通过点击的按钮找到它所在评论组里的textarea,这样就能准确拿到当前图片对应的评论内容:

<script>
$(document).ready(function(){
    $(".comment1").click(function(event){
        event.preventDefault();
        // 获取当前点击的按钮
        const $currentBtn = $(this);
        // 找到当前按钮所在评论组内的textarea,获取值
        const text1 = $currentBtn.closest('.comment-group').find('textarea').val();
        // 获取按钮的value(即图片ID)
        const submit1 = $currentBtn.val();
        
        // 提交到PHP页面
        $("body").load("personal.php",{ comment: text1, commentbtn: submit1 });
    });
});
</script>

更简洁的写法(如果textarea直接在按钮前):

因为你的PHP代码里textarea就在按钮的前一个位置,也可以直接用prev()方法,代码更短:

const text1 = $currentBtn.prev().val();

额外优化:用$.post替代body.load()

$("body").load()会替换整个页面的body内容,用户体验不太好。推荐用$.post提交,这样可以只更新评论区域,不刷新整个页面:

<script>
$(document).ready(function(){
    $(".comment1").click(function(event){
        event.preventDefault();
        const $currentBtn = $(this);
        const text1 = $currentBtn.prev().val();
        const submit1 = $currentBtn.val();
        const $commentGroup = $currentBtn.closest('.comment-group');
        
        // 发送POST请求
        $.post("personal.php", { comment: text1, commentbtn: submit1 }, function(response){
            // 假设personal.php处理后返回新增评论的HTML,添加到当前评论组后
            $commentGroup.after(response);
            // 清空textarea,方便用户继续评论
            $currentBtn.prev().val('');
        });
    });
});
</script>

最后再提一句:永远不要在循环里生成重复的ID,这是HTML的基础规范,会导致各种JS和CSS选择器的异常问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:11:37