php - 如何使用数据属性使单击的回复按钮仅显示一条评论的文本区域回复字段

标签 php jquery

我在这个问题上被困了几个小时,用谷歌搜索但仍然无法解决它。请大家给我一些指导,我将不胜感激。 我在我正在开发的 php 项目中添加了一个类似论坛的页面,用户可以在其中对帖子发表评论,然后提供对个人评论的回复。我的挑战是代码的回复部分。我在评论后面放置了一个回复按钮,单击后淡出以显示用户可以输入回复的文本区域。现在,当我单击回复按钮时,它会淡出,这没关系,但文本区域会显示帖子上的所有评论。我尝试引入一个带有帖子 ID 值的数据属性(data-id),以将单击的回复按钮绑定(bind)到要显示的特定文本区域,但我似乎无法理解这一点。如有任何帮助,我们将不胜感激。 我的 PHP 代码在这里:

<?php
require("includes/conn.php");
$stmt=$conn->prepare("SELECT post_id, user, topic, post, time FROM post_tb ORDER BY time DESC");
    $stmt->execute();
    $result = $stmt->get_result();
    $num_of_rows = $result->num_rows;
    if ($num_of_rows > 0){
        while ($row = $result->fetch_assoc()){
            $post_id = $row['post_id'];
            $user = $row['user'];
            $topic = $row['topic'];
            $post = $row['post'];
            $time = $row['time'];
            $time = date('M dS, Y g:i A', strtotime($time));
            echo '<div>
                    <div>
                        <h5><strong>'.$user.'</strong></h5><h6>'.$time.'</h6>
                        <h5><strong>'.ucfirst($topic).'</strong></h5>
                        <p data-id="'.$post_id.'">'.$post.'</p>
                    </div>      
                    <div>
                        <button type="button" class="btn btn-primary rep" id="but_rep" data-id="'.$post_id.'">Reply</button>
                    </div>
                    <form id="comment_reply" data-id="'.$post_id.'" method="post" action="">
                        <input type="hidden" class="hidden" value="'.$post_id.'" id="post_id">
                        <textarea class="form-control" rows="3" name="post_rep" id="post_rep"></textarea>
                        <button type="submit" class="btn btn-primary" id="post_rep_sub">Submit</button>
                    </form>
                <div/>';
            }
        }
?>

我的 jquery 在这里:

<script>
$(document).on('click', 'button#but_rep', function(e){
                e.preventDefault();
                var buttonId = $('form input#post_id').val();
                //$('button#but_rep[data-id="buttonId"]').fadeOut();
                //$('form#comment_reply[data-id="buttonId"]').fadeIn();
                $(this).fadeOut();
                $("form#post_comment_reply").fadeIn();
    });
</script>

最佳答案

无需使用data属性,您只需使用.closest().next()

$(document).on('click' , '.rep' , function(){
   var closestDiv = $(this).closest('div'); // also you can use $(this).parent();
   closestDiv.fadeOut();
   closestDiv.next('form').show();
});

Note: id="but_rep" , id="comment_reply" Id must be unique .. so use one id for just one element ..use class= for more elements

演示

$(document).ready(function(){
  $(document).on('click' , 'button.rep' , function(){
     var closestDiv = $(this).closest('div'); // also you can use $(this).parent()
     //closestDiv.fadeOut();
     $('.comment_reply').not(closestDiv.next('.comment_reply')).hide();
     //$('.rep').closest('div').not(closestDiv).show()
     closestDiv.next('form.comment_reply').slideToggle(100);
  });
});
form.comment_reply{
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
    <button type="button" class="btn btn-primary rep" data-id="">Reply</button>
</div>
<form class="comment_reply" data-id="" method="post" action="">
    <input type="hidden" class="hidden" value="" class="post_id">
    <textarea class="form-control" rows="3" name="post_rep" class="post_rep"></textarea>
    <button type="submit" class="btn btn-primary" class="post_rep_sub">Submit</button>
</form>

<div>
    <button type="button" class="btn btn-primary rep" data-id="">Reply</button>
</div>
<form class="comment_reply" data-id="" method="post" action="">
    <input type="hidden" class="hidden" value="" class="post_id">
    <textarea class="form-control" rows="3" name="post_rep" class="post_rep"></textarea>
    <button type="submit" class="btn btn-primary" class="post_rep_sub">Submit</button>
</form>

<div>
    <button type="button" class="btn btn-primary rep" data-id="">Reply</button>
</div>
<form class="comment_reply" data-id="" method="post" action="">
    <input type="hidden" class="hidden" value="" class="post_id">
    <textarea class="form-control" rows="3" name="post_rep" class="post_rep"></textarea>
    <button type="submit" class="btn btn-primary" class="post_rep_sub">Submit</button>
</form>

关于php - 如何使用数据属性使单击的回复按钮仅显示一条评论的文本区域回复字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44314088/

相关文章:

带 HREF 的 PHP While 循环

php - foreach如何遍历数组?

php - 高效地从 Select 语句中获取行数

Jquery - - 我如何简化代码

javascript - 在多页面网站上使用react

javascript - 有没有一种简单的方法可以根据当前值更改 css 值?

javascript - 如何从窗口外调用一个函数

javascript - 多选复选框ajax表过滤器

php - 浏览器尝试下载 PHP 文件而不是运行它们(Linux Mint、Apache2)

javascript - 如何在 InnerHTML 函数中输出 jquery 代码?