Форма комментариев и подкомментариев: проблемы при отображении и скрытии внутри цикла while (php) и на основе логики сценария jquery - PullRequest
0 голосов
/ 26 июня 2018

Проблема с моими двумя формами (для комментариев и подкомментариев пользователями).Я реализовал код jquery, чтобы эта форма могла отображаться или скрываться при нажатии на кнопку «ответить».Ну, чувак, пока все хорошо.Но после нескольких тестов я заметил, что это работает в комментариях, но не в подкомментариях.

В подкомментариях это работает, но только в тех подкомментариях, которые я опубликовал, и когда я вошел в свою собственную систему.На остальных подкомментах он не работает, и когда я нажимаю на кнопку «Ответить» на дополнительном комментарии или подкомментарии, он ничего не показывает и не скрывает, а другие кнопки, такие как «удалить» и «редактировать», выглядят неактивными ине работает вообще.Ну, это моя первая проблема.Теперь моя вторая проблема связана с диапазоном «просмотр ответов».

Когда я нажимаю на него, он сразу скрывает все «ul» (неупорядоченные списки) с классом «.replies» (в котором естьподкомментарии к основному комментарию), а не один за другим (переключение в режим скрытия и отображения), как хотелось бы.Кроме того, когда я нажимаю на него снова, он просто не отображается заново.Это код jQuery:

$(document).ready(function(){
  $(document).on('click' , '.reply' , function(){
     var closestDiv = $(this).closest('div'); // also you can use $(this).parent()
     //closestDiv.fadeOut();
     $('.replyto').not(closestDiv.next('.replyto')).hide();
     //$('.reply').closest('div').not(closestDiv).show()
     closestDiv.next('.replyto').slideToggle(100);
  });
});

Этот код предназначен для переключения формы комментариев «ответить».Он работает на первом уровне (комментарии), но не для подкомментариев.

$(document).ready(function(){
  $(document).on('click' , '.clicktoviewreplies' , function(){
     var closestUl = $(this).closest('ul'); // also you can use $(this).parent()
     //closestUl.fadeOut();
     $('.replies').not(closestUl.next('.replies')).hide();
     //$('.clicktoviewreplies').closest('ul').not(closestUl).show()
     closestUl.next('.replies').slideToggle(100);
  });
});

Этот пункт выше предназначен для переключения подкомментов или ответов.Это что-то вроде «показать ответы» и «скрыть ответы».И это весь PHP-код.Он основан на четырех таблицах: зарегистрированных_пользователей, видео (хотя его здесь нет), комментарии и подкомментарии, как вы можете видеть.

<?php
while($commentslist = $showcomments->fetch()){
$iduser = $commentslist['idUser'];
$idcomment = $commentslist['id'];
$showuser = $pdo->prepare("SELECT * FROM registered_users WHERE id = ?");
$showuser->execute(array($iduser));

while($row6 = $showuser->fetch()){

<li>
<div>
    <b><?php echo $row6['username']; ?></b><br>             
    <?php echo $commentslist['comments']; ?>

<!--additional comment buttons or controllers-->
    <?php
    if($iduser == $row['id']){ ?> <button>Edit</button><?php }else{ ?> <button>Report</button><?php } ?> <button class="reply">Reply</button><?php if($iduser == $row['id']){ ?> <a onClick="return confirm('You sure you wanna delete that comment there')" href=""><button>Delete</button></a><?php }
    ?>
</div>

<div class="replyto">
    <!--THIS IS TO SUBMIT THE CHILD COMMENTS(SUBCOMMENTS)-->
    <form enctype="multipart/form-data" method="post" action="<?php echo "postsubcomment.php?id=$idcomment"; ?>">
        <textarea name="subcomment" cols="50" rows="4"></textarea>
        <input type="submit" name="reply" value="Submit">
    </form>
</div>
<span class="clicktoviewreplies"><b>View replies</b></span> <!--ATTENTION!HERE IT IS WHERE MY PROBLEM IS. I CLICK ON IT AND IT HIDES ALL "UL"(Unordered Lists) WITH CLASS ".REPLIES" AND NOT ONE BY ONE (SWITCHING) LIKE I'D LIKE. AND WHEN I CLICK ON IT AGAIN, IT DOESN'T RESHOW.-->
<!--SECOND LEVEL UNORDERED LIST-->
    <ul class="replies">
<!--Subcomments go/show here. This happens everytime the user replies to a main comment-->
    <?php
    $showsubcomments = $pdo->prepare("SELECT * FROM subcomments WHERE idComment = ?");
    $showsubcomments->execute(array($idcomment));
    while($subcommentslist = $showsubcomments->fetch()){
        $subcommenter = $subcommentslist['idComment'];
        $selectcomment = $pdo->prepare("SELECT * FROM comments WHERE id = ?");
        $selectcomment->execute(array($subcommenter));
        $row7 = $selectcomment->fetch();

        //This is to get the parent comment user
        $selectuser = $pdo->prepare("SELECT * FROM registered_users WHERE id = ?");
        $selectuser->execute(array($row7['idUser']));
        $row8 = $selectuser->fetch();

        $subcommentslist['idUser']; //The user that made the subcomment
        $selectuser2 = $pdo->prepare("SELECT * FROM registered_users WHERE id = ?");
        $selectuser2->execute(array($subcommentslist['idUser']));
        $row9 = $selectuser2->fetch();

?>
<!--SECOND LEVEL LIST ITEM: This is to show the subcomments-->
        <li>
        <div>   
            <?php echo "<b>".$row9['username']; ?>             
            <?php echo "<br>".$subcommentslist['subcomments']."<br>"; ?> 
            <!--additional subcomment buttons or controllers-->
            <?php
            if($row9['id'] == $row['id']){ ?> <button>Edit</button><?php }else{ ?> <button>Report</button><?php } ?> <button class="reply">Reply</button><?php if($row9['id'] == $row['id']){ ?> <a onClick="return confirm('You sure you wanna delete that comment there')" href=""><button>Delete</button></a><?php }
            ?>                                   
        </div>
        <div class="replyto" style="margin-left:5%; position:relative;">
            <!--THIS IS TO REPLY TO BOTH THE MAIN COMMENT AND SUBCOMMENTS BELOW IT-->
            <form enctype="multipart/form-data" method="post" action="<?php echo "postsubcomment.php?id=$idcomment"; ?>">
                <textarea name="subcomment" cols="50" rows="4"></textarea>
                <input type="submit" name="reply" value="Submit">
            </form>
        </div>
        </li>
<?php               
            }//THIRD (SUBCOMMENTS) WHILE CLOSED
        ?>
    </ul> <!--SECOND UNORDERED LIST CLOSED -->
</li>
<?php
} //SECOND WHILE CLOSED
} //FIRST WHILE CLOSED
?>

Ну, первый экземпляр (комментарии) "ответитьКнопка «Поведение работает».Почему не второй экземпляр (ответ за подкомментарии)?Интересно, проблема во втором или третьем цикле while или, может быть, это как-то связано с соглашениями «ul» и «li».

1 Ответ

0 голосов
/ 27 июня 2018

Ну, босс здесь решит эти проблемы за тебя, чувак.Для второй проблемы (span: «просмотреть ответы») измените свой код следующим образом:

$(document).ready(function(){
     $(".clicktoviewreplies").click(function(){
    //$(this).closest('ul').next('.replies').hide();
    //$('.replies').
    $('.replies').not($(this).next('.replies')).css("display", "none");
    $(this).next('.replies').slideToggle(100);
    }); 
});

, а также измените текст на «показать / скрыть ответы».Что касается первой проблемы (кнопки ответа, комментарии и формы «подкоммент»), удалите тег «style» и все css, кроме атрибута «display: none».Помните, что jQuery или даже код Javascript могут иметь сбои, поскольку вы используете что-то помимо самого класса, необходимого для идентификации элемента в коде.Я не знаю, как объяснить, почему это происходит.Поэтому вместо использования:

<div class="replyto" style="margin-left:5%; position:relative;">

Использование:

<div class="replyto">

И в CSS используйте только:

    .replyto
{
   display: none;
}

И совет: для того, чтобы иметьхорошо структурированный и «нестабильный» способ реализации кода, вы можете избежать тегов «style» и использовать только CSS, организованный в отдельном документе таблицы стилей.Я надеюсь, что помог тебе, чувак.

...