0

SQL データベースから表形式のコメント/投稿のリストを実行する単純な PHP while ループがあります。各投稿には返信ハイパーリンクがあり、投稿の下にテキストエリア (フォーム) が開き、ユーザーはその特定の投稿に返信できます。1 つの投稿では問題なく動作しますが、複数の投稿がある場合、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>     

どんな助けでも大歓迎です。

4

2 に答える 2

2

$('.replymsgbox')セレクターを使用すると、そのようなクラスを持つすべての要素を取得しいます。

ボタンに関連するものだけを取得するには、次を使用します。

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

.replymsgboxこのように次の内部の要素の研究を絞り込んでい<tr>ます。

于 2012-09-18T22:39:40.827 に答える
1

(これは答えではなく、単なる観察です。コメントではそのような書式設定は許可されていません)

これは、あなたの質問に対する私のコメントで私が書いたことです:

<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 に変更を加える場合、複雑なエスケープ処理をすべて行う必要はありません。

于 2012-09-18T22:48:20.057 に答える