首页 > 解决方案 > 在点击时出现一个div,jquery

问题描述

我正在 ruby​​-sinatra 中构建一个应用程序,它允许您创建帖子然后回复帖子。我正在尝试在用户单击回复时显示回复帖子的表单。但是,目前我的代码仅适用于正在呈现的第一个消息 div。所有其他人都有使表单出现的按钮,但它们不起作用。

这是我的 .erb

<div class="message-link more ">
  <div class="comment-square">
    <% message.comments.each do |comment| %>

      <% comment.users.each do |user| %>
      <div><h5><%= user.username %></h5></div>
 
      <% end %>

      <script type="text/javascript">     
        $("#button").click(function() {
        $("#fn").show();
        $("#ln").show();
      });
      </script>
                    
      <p class="comment-text"><%= comment.text %>
        <input id="button" type="button" value="Reply"><br>
      </p>
        <div id="fn" hidden><input type="text" /></div><br>

      <% end %>
    </div>
 </div>

谁能发现为什么?

标签: javascripthtmljqueryrubysinatra

解决方案


您在呈现按钮之前引用它,因此它不会找到它。下一个问题是您将代码放在一个循环中,因此您将生成一堆具有相同 id 的元素。

而是使用事件委托来捕获按钮点击。您可以使用它来查找要显示的元素。

$(".message-link").on("click", "input.reply", function () {
  $(this).closest('.comment-square').find(".fn").toggle();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="message-link more ">
  <div class="comment-square">
    <div>
      <h5>XXX</h5>
    </div>
    <p class="comment-text">Foo Bar
      <input class="reply" type="button" value="Reply"><br>
    </p>
    <div class="fn" hidden><input type="text" /></div><br>
  </div>
  <div class="comment-square">
    <div>
      <h5>XXX</h5>
    </div>
    <p class="comment-text">Foo Bar
      <input class="reply" type="button" value="Reply"><br>
    </p>
    <div class="fn" hidden><input type="text" /></div><br>
  </div>  
</div>

脚本应该出现在message-linkdiv 之后或被包装在准备好的文档中。


推荐阅读