我一直在努力解决这个常见的社交网络功能。我想要做的是扩展div以显示评论,我确定你知道我在说什么。
用户发送的每个post
都会自动回显一个锚链接Comments
。如上所述,当点击此链接时,它只会展开显示分配给thought_id
的所有评论的div。
即使没有为帖子分配评论,我仍然希望div扩展以显示文本字段,这样任何用户都可以发表评论,最好回复一下:
<?php
<form action='' method='post' enctype='multipart/form-data'>
<table style='width:850px;'>
<tr>
<td><textarea name='msg' rows='2' maxlength='255' cols='80' placeholder=' add your comment...'></textarea></td>
<td><input type='submit' name='send' value='Share'/> </td>
</tr>
</table>
</form>
?>
这是我到目前为止的内容:
<script language="javascript">
var id = <?php echo $thought_id; ?>;
function toggle(id) {
var ele = document.getElementById("toggleComment" + id);
if (ele.style.display == "block") {
ele.style.display = "none";
} else {
ele.style.display = "block";
}
}
</script>
这里是找到comments
锚链接的地方。由于它非常冗长,我将回声内容仅减少到相关代码:
echo "<div class='message_wrapper'>
<div class='where_msg_displayed'>
<div class='more_options' style='float: right;'>
// Options, and display picture of the user who posted the
// thought can be found here.
</div>
</div>
<div class='where_details_displayed'>
<div class='mini_nav' style='float: right;'>
// Below is the comments anchor link.
<a onclick='return toggle($thought_id);' style='padding-left: 5px;'> Comments ($num_of_comments) </a>
</div>
// I expect the following piece below to every comment assigned to the thought_id in the database.
<div id='toggleComment$thought_id' class='new_comment' style='display:none;'>
<br/> $comment_posted_by said: $comment_body
</div>
</div>
</div>";
其他信息:
$thought_id
是用户帖子的ID。 (表user_thoughts
,列id
)。user_comments
的表,该表存储了所有评论,并将其链接到thought
分配给它的post_id
。comments
。答案 0 :(得分:0)
根据OP的
的PHP代码<?php
$thought_id = 1;
$num_of_comments = 10;
$comment_posted_by = "Me";
$comment_body = "test comment body";
//hard coded above vars to achieve assumptions
echo "<div class='message_wrapper'>
<div class='where_msg_displayed'>
<div class='more_options' style='float: right;'>
// Options, and display picture of the user who posted the
// thought can be found here.
</div>
</div>
<div class='where_details_displayed'>
<div class='mini_nav' style='float: right;'>
// Below is the comments anchor link.
<a href='' onclick='return toggle($thought_id);' style='padding-left: 5px;'> Comments ($num_of_comments) </a>
</div>
// I expect the following piece below to every comment assigned to the thought_id in the database.
<div id='toggleComment$thought_id' class='new_comment' style='display:none;'>
<br/> $comment_posted_by said: $comment_body
</div>
</div>
</div>";
?>
<强>的JavaScript 强>
<script language="javascript">
var id = <?php echo $thought_id; ?>;
function toggle(id) {
var ele = document.getElementById("toggleComment" + id);
if (ele.style.display == "block") {
ele.style.display = "none";
} else {
ele.style.display = "block";
}
return false;
}
</script>
上面的代码对我有用,按照单个记录。
现在您已在jQuery
你可以简单地使用
$(".message_wrapper .mini_nav a[href!='']").click(function() {
$(this).parent().next().toggle();
});
答案 1 :(得分:0)
您只需使用充当公开三角形的<details>
HTML标记即可。
<details>
<summary>View comments</summary>
<ul>
<li>You comments</li>
<li>You comments</li>
<li>You comments</li>
</ul>
</details>
https://developer.mozilla.org/en/docs/Web/HTML/Element/details
唯一的问题是可爱的IE浏览器不支持它。
答案 2 :(得分:0)
首先,here是您希望根据代码实现的工作示例。
我不得不删除php部分,因为jsfiddle没有解释它,所以接下来是你的代码,包括PHP位。
我假设你在问题中添加了jquery标签时加载了jQuery。
知道为什么你尝试的东西不起作用很复杂,因为我们缺少重要的一点,比如:你如何将你的内容加载到DOM中?动态与否(ajax?)
<div class='message_wrapper'>
<div class='where_msg_displayed'>
<div class='more_options' style='float: right;'>
</div>
</div>
<div class='where_details_displayed'>
<div class='mini_nav' style='float: right;'>
<a href="#" class="toggle-comment" data-id="<?=$thought_id?>" style='padding-left: 5px;'> Comments (<?=$num_of_comments?>) </a>
</div>
<div id='toggleComment<?=$thought_id?>' class='new_comment' style='display:none;'>
<br/> <?=$comment_posted_by?> said: <?=$comment_body?>
</div>
</div>
</div>
echo
,而是使用html模板。var id = <?php echo $thought_id; ?>;
相反,您可以将您的think_ids存储为链接的数据属性,并稍后使用jQuery的data()轻松获取它们。$(function() {
$("a.toggle-comment").on("click", function(event) {
// prevents browser to go to href's #
event.preventDefault();
// uses Jquery's data() function to get comment id from link's data-id attribute
var id = $(this).data('id');
// get element by id and toggle display
var ele = document.getElementById("toggleComment" + id);
$(ele).toggle();
});
});
在这里,我摆脱了你的toggle()函数,并使用jQuery的on()替换为处理函数,每次我们点击具有toggle-comment
CSS类的链接时都会调用它。它具有在加载页面后处理动态添加内容的优点。 jQuery的on()文档页面很好地解释了这个(以及不推荐使用的live()页面)
请注意,您需要将此toggle-comment
课程添加到每个Comments (X)
链接
如果您不熟悉jQuery,则应考虑阅读this page以了解第一行的作用以及您需要它的原因。 (指将您的代码括在$(function() {...});
)
event.preventDefault();
告诉浏览器在点击链接时没有执行其默认行为(转到该链接并将#附加到地址栏)
$(this).data('id');
读取将单击的链接(this)放入jQuery对象并使用data()获取其data-id属性的值,该属性设置为$ thought_id
请参阅我的updated fiddle了解您的CSS问题,我删除了浮动内联样式,并使用相对于message_wrapper的绝对定位来定位div.mini_nav。 我认为这个问题与原始问题无关,应该在另一个问题中提出。
答案 3 :(得分:0)
如果我正确理解您的问题,那就是您正在寻找的 https://jsfiddle.net/vrqsz3ev/7/
<div class='message_wrapper'>
<div class="main-msg-container">
<div class='where_msg_displayed'>
<input type="hidden" id="msg-id" value="1">
<div class='more_options'>
MESSAGE1
</div>
<div class='mini_nav'>
<button class="open-comment">comments</button>
</div>
</div>
<div class="hide-mess-details">
<div class='where_details_displayed'>
<div id='toggleComment1'class='new_comment msg-id-1'>
sachin said: Hii guysss (cmt of msg 1)
</div>
<form action='' class="comment-form"method='post' enctype='multipart/form-data'>
<textarea name='msg' placeholder=' add your comment...'></textarea>
<input type='submit' name='send' value='Share'/>
</form>
</div>
</div>
</div>
我使用 jQuery 制作了它 在查看代码时,有些需要注意的事项是
share
按钮,则只会更新相应消息的注释。为了检查,我在单击comment
按钮时添加了消息ID以及表单。用于检查目的我添加了警报(相应消息的消息ID)如果单击{{1 }} share button
下添加消息
.where_msg_displayed
下的所有评论(如果您愿意,可以在相应的消息下添加详细信息 - 需要少量修改)如果您继续使用此代码,只需很少编辑即可达到上述要求。