Как показать / скрыть текстовое поле ответа, используя Flask и jQuery? - PullRequest
0 голосов
/ 17 апреля 2019

Я некоторое время не использовал HTML / Javascript, поэтому я немного запутался, как с этим справиться.

Я создаю Reddit-Y клон, используя Flask. Я нахожусь в точке, где я могу добавить комментарии детей к любому комментарию, и у меня все хорошо отображается, но когда я тестировал с этим, у меня просто была кнопка с текстовым полем ответа / отправить, всегда видимая для каждого комментария, я хочу попытаться эмулировать фактическое поведение reddit, где есть какой-то текст с надписью «ответить» и при нажатии на него появляется текстовое поле.

Вот мой текущий HTML, который показывает текстовое поле / кнопку отправки для каждого комментария. Как я могу использовать jQuery (или даже vanilla JS), чтобы сделать его таким, чтобы он отображался только при нажатии на другой текст, который говорит reply?

<ul>
  {%- for comment in comments recursive %}
    <li>
        {{ comment.commentContent }}

        <form action="{{ url_for('blog.addComment', postId=post['id'], redirectHere=True, parentComment=comment['id'])}}" method="post">
            <textarea name="comment"></textarea>
            <input type="submit">
        </form>

        {%- if comment.children_comments -%}
            <ul>{{ loop(comment.children_comments) }}</ul>
        {%- endif %}
    </li>
  {%- endfor %}
</ul>

Я был пойман между двумя умами. Должен ли я иметь div для каждого комментария, изначально установленного как невидимый, и после нажатия reply это сделает текстовую область / форму видимой? Или лучше подождать, пока кто-нибудь нажмет reply, а затем динамически с помощью jQuery добавить форму в HTML?

1 Ответ

2 голосов
/ 17 апреля 2019

Лучше всего использовать опцию сворачивания Boostraps для скрытия и отображения текстового поля комментария. Код ниже показывает, как это работает

<!DOCTYPE html>
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">

  <button type="button" class="btn btn-info" data-toggle="collapse" data-target="#demo">Hide and show comment box</button>
  <div id="demo" class="collapse">
comment box appears here
  </div>
</div>

</body>
</html>

Теперь, чтобы применить его к вашему коду для отображения и скрытия поля для комментариев, Мне нужно использовать ваш идентификатор комментария , чтобы каждый комментарий кнопки нажимался уникально. если вы получите идентификатор комментария как {{ comment.commentid }}, тогда передайте его идентификатор демо и data-target parameters

так что с bootsraps и файлом jquery ваш код будет выглядеть как

    <ul>
      {%- for comment in comments recursive %}
        <li>
            {{ comment.commentContent }}

      <button type="button" class="btn btn-info" data-toggle="collapse" data-target="#demo{{ comment.commentid }}">Hide and show comment box</button>
       <div id="demo{{ comment.commentid }}" class="collapse">

            <form action="{{ url_for('blog.addComment', postId=post['id'], redirectHere=True, parentComment=comment['id'])}}" method="post">
                <textarea name="comment"></textarea>
                <input type="submit">
            </form>
    </div>

        {%- if comment.children_comments -%}
            <ul>{{ loop(comment.children_comments) }}</ul>
        {%- endif %}
    </li>
  {%- endfor %}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...