Rails динамически назначают идентификаторы элементам и выбирают их в функции js

1

У меня есть эта точка зрения, где можно оставлять комментарии и отвечать на них. Я хочу, чтобы у вас была кнопка - ответ - и нажав на нее, откроется форма ниже, чтобы добавить текст комментария и кнопку для публикации.

Это то, что у меня есть на мой взгляд:

<ul>
  <div class="comment">


  <strong><%= comment.user.name %></strong> - <%= comment.body %> <br>
  <small>Submitted <%= time_ago_in_words(comment.created_at) %> ago
<button class="comment">Reply</button>
<% if comment.user_id == current_user.id %>
<%= link_to 'Edit', edit_comment_path(comment), class: 'btn btn-default btn-sm' %>
<% end %>
</div>


<div class="comment-form">
  <%= semantic_form_for [comment, Comment.new] do |f| %>
      <%= f.text_area :body, placeholder: "Add a Reply", rows: 1, required: true, class: 'form-control' %><br/>
      <%= f.submit "Post", class: 'btn btn-primary btn-sm'  %>

      <% end %>
</div>


        <%= render partial: 'comments/comment', collection: comment.comments %>


</ul>

И это application.js

$(document).ready(function() {

$('.comment-form').hide(); //Initially form wil be hidden.

 $('.comment').click(function() {
  $('.comment-form').show();//Form shows on button click

  });
});

Сначала я попытался использовать div id, но проблема в том, что только первый комментарий скрывает форму при загрузке страницы. Поэтому я изменил использование классов (как в коде, который я опубликовал). Теперь все формы загрузки страницы закрыты. Проблема заключается в том, когда я нажимаю кнопку на комментарии, чтобы открыть соответствующую форму во всех формах во всех открытых комментариях.

Как я могу исправить?

1 ответ

1
Лучший ответ

Вы можете использовать как идентификаторы, так и класс.

Используйте класс, чтобы закрыть их изначально так, как вы, но добавьте идентификатор, например, следующий код:

<button class="comment" data-comment-id="comment_<%=comment.id%>">Reply</button>

а затем создайте форму комментария

<div class="comment-form" id="comment_<%=comment.id%>">

вы javascript-код станет:

$('.comment').click(function() {
  var comment_id = "#" + $(this).attr('data-comment-id');
  $(comment_id).show();
});
  • 0
    Спасибо за Ваш ответ. Код, который вы предложили, возвращает undefined local variable or method comment_id for #<#<Class:0x007f92953f78c8>:0x007f929530e600> ссылкой на <div class="comment-form" id="comment_<%=comment_id%>">
  • 0
    Обратите внимание, что я использовал «комментарий» для кнопки и «форму комментария» для формы. Не должны ли последние 2 строки js ссылаться на comment-form_id вместо comment_id?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню