Главная » PHP » Форма комментариев и подкомментариев: проблемы при отображении и скрытии внутри цикла while (php) и на основе логики сценария jquery
Форма комментариев и подкомментариев: проблемы при отображении и скрытии внутри цикла 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»?
А также измените текст на «показать / скрыть ответы».
Что касается первой проблемы (кнопки ответа, комментарии и формы «подкоммент»), удалите тег «style» и все css, кроме атрибута «display: none». Помните, что jQuery или даже код Javascript могут иметь сбои, поскольку вы используете что-то помимо самого класса, необходимого для идентификации элемента в коде. Я не знаю, как объяснить, почему это происходит.
Поэтому вместо использования:
И подсказка: для того, чтобы иметь хорошо структурированный и «нестабильный» способ реализации кода, вы могли бы избежать тегов «style» и использовать только CSS, организованный в отдельном документе таблицы стилей. Я надеюсь, что помог тебе, чувак.
Проблема с моими двумя формами (для комментариев и подкомментариев пользователями). Я реализовал код jquery, чтобы эта форма могла отображаться или скрываться при нажатии на кнопку «ответить». Ну, чувак, пока все хорошо. Но я заметил после нескольких тестов, что это работает на комментариях, но не на подкомментариях.
На подкомментариях это работает, но только на подкомментариях, которые я разместил, и когда я вошел в свою собственную систему. На остальных подкомментах он не работает, и когда я нажимаю на кнопку «Ответить» на дополнительном комментарии или подкомментарии, он ничего не показывает и не скрывает, а другие кнопки, такие как «удалить» и «редактировать», выглядят неактивными и не работает вообще. Ну, это моя первая проблема. Теперь моя вторая проблема связана с диапазоном «просмотр ответов».
Когда я нажимаю на него, он сразу скрывает все «ul» (неупорядоченные списки) с классом «.replies» (в котором есть подкомментарии к основному комментарию), а не один за другим (переключение скрытия и отображения), например Мне бы хотелось. Кроме того, когда я нажимаю на него снова, он просто не отображается заново. Это код jQuery:
Это выше, чтобы переключить «ответ» форму комментариев. Это работает на первом уровне (комментарии), но не для субкомментариев.
Это выше для переключения подкомментариев или ответов. Это что-то вроде «Показать ответы» и «Скрыть ответы». И это весь PHP-код. Он основан на четырех таблицах: зарегистрированных_пользователей, видео (хотя его здесь нет), комментарии и субкомментарии, как вы можете видеть.
Ну, первый экземпляр (комментарии) «кнопка ответа» работает. Почему не второй экземпляр (ответ за подкомментарии)? Интересно, проблема во втором или третьем цикле while или, может быть, это связано с механизмами «ul» и «li»?
Решение
Ну, босс здесь решит эти проблемы за тебя, чувак.
Для второй проблемы (span: «просмотреть ответы»), измените свой код на это:
А также измените текст на «показать / скрыть ответы».
Что касается первой проблемы (кнопки ответа, комментарии и формы «подкоммент»), удалите тег «style» и все css, кроме атрибута «display: none». Помните, что jQuery или даже код Javascript могут иметь сбои, поскольку вы используете что-то помимо самого класса, необходимого для идентификации элемента в коде. Я не знаю, как объяснить, почему это происходит.
Поэтому вместо использования:
Использование:
А в CSS используйте только:
И подсказка: для того, чтобы иметь хорошо структурированный и «нестабильный» способ реализации кода, вы могли бы избежать тегов «style» и использовать только CSS, организованный в отдельном документе таблицы стилей. Я надеюсь, что помог тебе, чувак.
Другие решения
Других решений пока нет …