【问题标题】:JQuery 'Reply' hyperlink in PHP while loopPHP while循环中的JQuery“回复”超链接
【发布时间】:2012-09-18 22:35:01
【问题描述】:

我有一个简单的 PHP while 循环,它执行来自 SQL 数据库的表格 cmets/posts 列表。每个帖子都有一个回复超链接,该链接将在帖子下方打开一个文本区域(表单),允许用户回复该特定帖子。它适用于一篇文章,但是当有多个文章时,jQuery 会为每个文章打开所有文本区域。我认为这是我使用 jQuery 调用相同类的问题。但我不知道如何处理它。我想要实现的是允许用户单击特定帖子中的回复超链接,并且只有该文本区域会出现在下面,而不是同时出现所有这些文本区域。

这是生成具有回复功能的帖子列表的 PHP 代码。

<?php>

echo "<table width=\"100%\" border=\"0\" cellspacing=\"10\">";

while ($row2 = mysql_fetch_assoc($res)) 
{

echo "
   <tr>
   <td>
      <span class=\"anonname\">Anon" . $row2['uid'] . " </span> 
      <span class=\"smalltext\"> says:</span>
   </td>
   </tr>
   <tr>
   <td>
      <span class=\"messagetext\">" . $row2['msg'] . "</span></td>
   </tr>
   <tr>
   <td>
       <div class=\"replystyle\"><span class=\"replytext\"><a href=\"#\"  
       class=\"replybtn\">Reply</a> &#8901; <a href=\"#\">Like</a> </span> <span              
       class=\"replytext\" style=\"float:right;\"><span class=\"timetext\">" .         
       $row2['timestamp'] . "</span><a href=\"report.html\">Report</a></span></div>
   </td>
   </tr>
   <tr>
   <td>
       <div id=\"replymsgbox\">
       <form id=\"messaging\" action=\"\" method=\"post\" accept-charset=\"UTF-8\"> 
       <div class=\"tarea\">
       <textarea name=\"message\" rows=\"2\" class=\"txtbx\"></textarea>
       </div>
   <span style=\"float:right;\"><input name=\"submit\" class=\"signupbtn\"          
       type=\"submit\" value=\"share\" /></span><br/><br/>
       </form>
   </div>
  </td>
  </tr>";
}
       echo "</table>";
}
?>

这里是 jQuery

<script language="javascript" type="text/javascript"> 
  $(document).ready(function(){
            $('.replymsgbox').hide();
    $('.replybtn').click(function(){
    $('.replymsgbox').slideToggle('fast');
       });
       });
</script>     

任何帮助将不胜感激。

【问题讨论】:

  • 天哪。您可能会考虑使用模板系统(例如,TWIG),这样您就不必弄乱您的 html(转义每个引号等)。它也将使管理/调试变得更容易。

标签: php jquery loops textarea reply


【解决方案1】:

使用$('.replymsgbox') 选择器,您将获得所有具有此类的元素。

要获取与按钮相关的内容,请使用:

$('.replybtn').click(function(){
    $('.replymsgbox', $(this).parent().parent().next()).slideToggle('fast');
});

您正在以这种方式缩小对下一个 &lt;tr&gt; 内的 .replymsgbox 元素的研究。

【讨论】:

  • 嘿@moonwave99,我已经尝试了您的解决方案,现在文本区域没有切换。它根本没有打开,它是否针对正确的元素?顺便说一句,感谢您的帮助。
  • 我错过了.parent() - 它是$('.replymsgbox', $(this).parent().parent().parent().next()).slideToggle('fast');
  • 我想你也错过了一个额外的 :) 当我包括第五个父母时它起作用了(我不确定有这么多是否正常,但我还在学习:))。但显然你让我走上了正轨并回答了我的问题。非常感谢您花时间帮助我。非常感谢。编码愉快!
  • 这当然不是“正常的” :)) - 为了让它更短,你必须改变一些你的标记,但你会通过练习来学习这一点 - 当你在 SO 上随时问'被卡住了!
【解决方案2】:

(这不是答案,只是观察;cmets 不允许这种格式)

这是我在对您的问题的评论中所写的:

<table width="100%" border="0" cellspacing="10">
<?php
while ($row2 = mysql_fetch_assoc($res)) {
?>    
   <tr>
   <td>
      <span class="anonname">Anon<?php echo $row2['uid'];?></span> 
      <span class="smalltext"> says:</span>
   </td>
   </tr>
   <tr>
   <td>
      <span class="messagetext"><?php echo $row2['msg']; ?></span></td>
   </tr>
   <tr>
   <td>
       <div class="replystyle"><span class="replytext"><a href="#"  
       class="replybtn">Reply</a> &#8901; <a href="#">Like</a> </span> 
       <span class="replytext" style="float:right;"><span 
       class="timetext"><?php echo $row2['timestamp']; ?></span><a 
       href="report.html">Report</a></span></div>
   </td>
   </tr>
   <tr>
   <td>
       <div id="replymsgbox">
       <form id="messaging" action="" method="post" accept-charset="UTF-8"> 
       <div class="tarea">
         <textarea name="message"rows="2" class="txtbx"></textarea>
       </div>
       <span style="float:right;"><input name="submit" class="signupbtn"          
       type="submit" value="share" /></span><br/><br/>
       </form>
   </div>
  </td>
  </tr>
<?php } ?>
</table>

看到清理效果更好了吗?现在,如果您想对 HTML 进行更改,您不必经历所有复杂的转义机制。

【讨论】:

  • 太棒了!感谢@BryanH 的建议,我将研究 TWIG 模板系统。如果它能让我的工作流程更顺畅,那将是一件好事。也是如此,逃避可能会很痛苦:)谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多