【问题标题】:How to use Rails Each Array and In-page search to show/hide div content如何使用 Rails Each Array 和 In-page search 显示/隐藏 div 内容
【发布时间】:2017-08-27 13:02:40
【问题描述】:

我正在尝试设置一个简单的搜索栏来显示/隐藏我的 rails 应用程序中的内容。具体来说,试图允许某人通过我的聊天室中的用户名搜索特定用户,这些用户名使用 Rails 每个数组显示。我查看了这两个问题以寻求指导,但仍然没有得到它的工作 - In-page search using contains() to show/hide div contentDynamical search-function to show/hide divs。每当我输入用户名时,我的搜索框中什么都没有出现。我在下面列出了我的代码,任何关于这个问题的帮助都会很棒。非常感谢!

Index.html.erb

<div class="col-md-4">
 <form name="searchBox">
   Search for a User: <input type="text" name="keyword" />
   <input type="button" value="Search" onClick="searchFunction()" />
</form>
<% (User.all - [current_user]).each do |user| %>
<div class="box2" style="display:none" id="searchable">
            <%= image_tag user.background, height: 95, width: 165, class: "css-style4"   %>             
            <strong><%= link_to user.username, direct_message_path(user.id), data: {behavior: "chatroom-link", chatroom_id: Chatroom.direct_message_for_users([current_user, user]).id} %></strong>
</div>
<% end %>
</div>

chatroomsearch.js

$(document).on('turbolinks:load',function(){
function searchFunction() {
$("#searchable")
    .hide()
    .filter(":contains('" + $("input[name='keyword']").val() + "')")
    .show();
}
}

【问题讨论】:

  • 您是否将 searchFunction 函数包装在 $(document).ready() 函数中?
  • @SarmadSabih 我使用 $(document).on('turbolinks:load', function(){ 我相信这是 document.ready 的替代品

标签: javascript ruby-on-rails ruby-on-rails-5


【解决方案1】:

您的问题在这一行:

<div class="box2" style="display:none" id="searchable">

ID 必须是唯一的。因此,删除它们并将它们用作类,如:

<div class="box2 searchable" style="display:none">

这样你需要改变选择器:

$("#searchable")

到:

$(".searchable")

sn-p:

function searchFunction() {
    $(".searchable")
            .hide()
            .filter(":contains('" + $("input[name='keyword']").val() + "')")
            .show();
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>


<div class="col-md-4">
    <form name="searchBox">
        Search for a User: <input type="text" name="keyword"/>
        <input type="button" value="Search" onClick="searchFunction()"/>
    </form>
    <div class="box2 searchable" style="display:none">
        <strong><a href='/direct_messages/1' data-behavior="chatroom-link"
                   data-chatroom_id="Chatroom.direct_message_for_users([current‌​_user, user]).id">Rodrigo1 Williams</a></strong>
    </div>
    <div class="box2 searchable" style="display:none">
        <strong><a href='/direct_messages/1' data-behavior="chatroom-link"
                   data-chatroom_id="Chatroom.direct_message_for_users([current‌​_user, user]).id">Rodrigo2 Williams</a></strong>
    </div>
</div>

【讨论】:

  • 非常感谢您的帮助,您的解释很棒,但对我仍然不起作用。我有一种感觉,这可能是由于 rails &lt;strong&gt;&lt;%= link_to user.username, direct_message_path(user.id), data: {behavior: "chatroom-link", chatroom_id: Chatroom.direct_message_for_users([current_user, user]).id} %&gt;&lt;/strong&gt; Bc 的这条线,当我输入用户名时它不会调用它。
  • 试图弄清楚,以前从未做过 ruby​​ 行到 html 的转换。立即阅读文档。
  • 根据文档示例,我认为 html 中的 rails 行看起来像这样:&lt;a href='/direct_messages/1' data-behavior="chatroom-link" data-chatroom_id="Chatroom.direct_message_for_users([current_user, user]).id"&gt;Rodrigo Williams&lt;/a&gt;
  • @Omar Snippet 已使用您的锚点更新。现在,如果您键入 Rodrigo 并单击按钮,它应该可以工作。让我知道我能为您提供什么帮助。
  • 非常感谢@gaetanoM 有一个很棒的日冠军!
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 2016-04-07
  • 2022-01-22
相关资源
最近更新 更多