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

Проблема с моими двумя формами (для комментариев и подкомментариев пользователями). Я реализовал код 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

Решение

Ну, босс здесь решит эти проблемы за тебя, чувак.
Для второй проблемы (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, организованный в отдельном документе таблицы стилей. Я надеюсь, что помог тебе, чувак.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector