[英]How to display comments for all post
I have a post and comment system. 我有一个发布和评论系统。 Something like facebook post and comment system.
像Facebook的帖子和评论系统。 The post display properly, I can submit comment on all posts.
帖子显示正确,我可以对所有帖子发表评论。 But the comments only display for the first post ie the post displayed at the top.
但是评论仅显示在第一个帖子上,即该帖子显示在顶部。 .
。 The problem on which I need your assistance is as follows: -The comments for each of the posts should display correspondently.
我需要您帮助的问题如下:-每个帖子的评论应相应显示。
These what I have done. 这些是我所做的。 View:
视图:
<div class="box box-widget">
<div class="box-header with-border">
<div class="user-block">
<span class="description">Shared publicly - <?php echo time_ago($post['post_date'])?></span>
</div>
</div>
<div class="box-body" style="display: block;">
<img class="img-responsive show-in-modal" src="<?php echo base_url('post_file/'.$post['post_image'])?>" alt="">
<input type="hidden" id="stid" value="<?php echo $post['spid']; ?>">
<p><?php echo $post['postcontent']?></p>
<button type="button" class="btn btn-default btn-xs"><i class="fa fa-share"></i> Share</button>
<div>
<input type="hidden" id="pl_postid" name="pl_postid" value="<?php echo $post['spid']; ?>">
<button type="button" class="btn btn-default btn-xs"><i class="fa fa-thumbs-o-up"></i> Like</button>
</div>
<span class="pull-right text-muted"><?php //echo $countlikes ?> likes - 3 comments</span>
</div>
<div id="display_comment"></div>
<div class="box-footer" style="display: block;">
<form id="com" class="com" method="post">
<div class="img-push">
<input type="hidden" class="status_id" id="status_id" name="status_id" value="<?php echo $post['spid']; ?>">
<textarea name="comment" id="comment" class="form-control input-sm comment" placeholder="Press enter to post comment"></textarea>
<div class="box-footer box-form">
<btn class="btn btn-azure btn-sm pull-right commentbt" id="commentbt">Comment</btn>
<ul class="nav nav-pills">
<li><i class="fa fa-bullhorn"></i></li>
</ul>
</div>
</div>
</form>
</div>
</div>
<?php endforeach;?>
Jquery: jQuery的:
$(".commentbt").click(function(){
var status_id = $(this).closest("div.img-push").find("input[name='status_id']").val();
var comment = $(this).closest("div.img-push").find("textarea[name='comment']").val();
alert(comment);
var dataString = 'status_id='+ status_id +'&comment='+ comment;
if(comment==''||status_id==''){
alert('Can not send empty comment')
}
else{
$('#display_comment').show();
//$("#display_comment").fadeIn(100).html('<img src="<?php //echo base_url();?>uploads/ajax-loader.gif" />Loading Comment...');
$.ajax({
type:"POST",
url:"<?php echo site_url('user/postcomment')?>",
data:dataString,
cache:false,
success: function () {
$(document).ready(function(){
var status_id = $("#stid").val();
$.post('<?php echo site_url('user/getcomments');?>',
{
status_id:status_id
},
function(data){
$("#display_comment").html(data);
});
});
$('#com')[0].reset();
}
});
}return false;
});
});
Thanks 谢谢
HTML Fixes: HTML修复:
Don't use the same ID
on differents elements, like you are doing with display_comment
. 不要像在
display_comment
那样在differents元素上使用相同的ID
。 You are creating a set of posts with the foreach loop, so this will create multiple elements with the same ID
. 您正在使用foreach循环创建一组帖子,因此这将创建具有相同
ID
多个元素。 Use a custom class instead. 请改用自定义类。 Remenber there should not be more than one item with the same
ID
. 请记住 ,具有相同
ID
项目不得超过一个。 The elements that where fixed are next ones: 固定的元素是下一个:
<input type="hidden" id="stid" value="<?php echo $post['spid'];?>">
<input type="hidden" id="pl_postid" name="pl_postid" value="<?php echo $post['spid']; ?>">
<div id="display_comment"></div>
<form id="com" class="com" method="post">
<input type="hidden" class="status_id" id="status_id" name="status_id" value="<?php echo $post['spid'];?>">
<textarea name="comment" id="comment" class="form-control input-sm comment" placeholder="Press enter to post comment"></textarea>
<btn class="btn btn-azure btn-sm pull-right commentbt" id="commentbt">Comment</btn>
Since you are creating multiples box-widget
, the previous elements will generate multiple of they with the same ID
. 由于您正在创建倍数
box-widget
,因此先前的元素将生成多个具有相同ID
元素。 The fixed code will be like this: 固定代码将如下所示:
<div class="box box-widget">
<div class="box-header with-border">
<div class="user-block">
<span class="description">Shared publicly - <?php echo time_ago($post['post_date'])?></span>
</div>
</div>
<div class="box-body" style="display:block;">
<img class="img-responsive show-in-modal" src="<?php echo base_url('post_file/'.$post['post_image'])?>" alt="">
<input type="hidden" class="stid" value="<?php echo $post['spid'];?>">
<p><?php echo $post['postcontent']?></p>
<button type="button" class="btn btn-default btn-xs">
<i class="fa fa-share"></i> Share
</button>
<div>
<input type="hidden" class="pl_postid" name="pl_postid" value="<?php echo $post['spid']; ?>">
<button type="button" class="btn btn-default btn-xs">
<i class="fa fa-thumbs-o-up"></i> Like
</button>
</div>
<span class="pull-right text-muted"><?php //echo $countlikes ?> likes - 3 comments</span>
</div>
<div class="display_comment"></div>
<div class="box-footer" style="display:block;">
<form class="com" method="post">
<div class="img-push">
<input type="hidden" class="status_id" name="status_id" value="<?php echo $post['spid'];?>">
<textarea name="comment" class="form-control input-sm comment" placeholder="Press enter to post comment"></textarea>
<div class="box-footer box-form">
<btn class="btn btn-azure btn-sm pull-right commentbt">Comment</btn>
<ul class="nav nav-pills">
<li><i class="fa fa-bullhorn"></i></li>
</ul>
</div>
</div>
</form>
</div>
</div>
JQUERY Fixes: JQUERY修复:
1) The main problem on this section is that you was targeting the elements by ID
, and you had multiple elements with the same ID
, so you probably was targeting only the first element with those ID
that appears on the HTML. 1)本节的主要问题是您要按
ID
定位元素,并且您有多个具有相同ID
元素,因此您可能只定位了出现在HTML上的具有这些ID
的第一个元素。 So, how to proceed? 那么,如何进行呢? Try to find elements by the relation they have with the clicked button, like the approach you use for:
尝试通过元素与单击按钮的关系来查找元素,例如用于以下方法:
var status_id = $(this).closest("div.img-push").find("input[name='status_id']").val();
2) Another issue was using the $(document).ready()
inside the ajax call, that was removed. 2)另一个问题是在ajax调用中使用了
$(document).ready()
,该问题已被删除。
A fixed code should look like this: 固定代码应如下所示:
$(".commentbt").click(function()
{
var status_id = $(this).closest("div.img-push").find("input[name='status_id']").val();
var comment = $(this).closest("div.img-push").find("textarea[name='comment']").val();
alert(comment);
var dataString = 'status_id=' + status_id + ' &comment=' + comment;
if (comment == '' || status_id == '')
{
alert('Can not send empty comment')
// Finish function here if error detected!
return;
}
// The next line was fixed!
//$('#display_comment').show();
var dComment = $(this).closest(".box-widget").find(".display_comment");
dComment.show();
// The next line was also wrong (Homework for you...)
//$("#display_comment").fadeIn(100).html('<img src="<?php //echo base_url();?>uploads/ajax-loader.gif" />Loading Comment...');
// Save clicked button object, we going to need it inside the ajax.
var clickedBtn = $(this);
$.ajax({
type: "POST",
url: "<?php echo site_url('user/postcomment')?>",
data: dataString,
cache: false,
success: function()
{
// Wrong again, the next line was fixed!!
//var status_id = $("#stid").val();
var status_id = clickedBtn.closest(".box-widget").find("input.stid").val();
console.log("Getting comments for status_id = " + status_id);
$.post(
"<?php echo site_url('user/getcomments');?>",
{status_id: status_id},
function(data)
{
// Wrong again! Fixed!
//$("#display_comment").html(data);
dComment.html(data);
}
);
// Another error, guess what...
//$('#com')[0].reset();
clickedBtn.closest("form.com").reset();
}
});
});
Finally, i have to said, i really doubt your code will still work at all after all the changes i have made, but i hope at least you understood the mains issues you was committing.
最后,我不得不说,我真的怀疑您的代码在进行了所有更改之后是否仍然可以正常工作,但是我希望至少您了解您提交的主要问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.