0

我正在尝试动态重做搜索,因为用户将它们逐个字符地输入到搜索字段中。我对编程很陌生,因此我不知道自己在做什么。谢谢你的帮助。

用户/索引视图:

<%= form_tag users_path, :method => 'get', class:"input-append" do %>

  <%= search_field_tag :search, params[:search], :class => "search-query2", id:"search_on_index", placeholder: "Search for people" %>

  <script type="text/javascript">
      $('#search_on_index').keyup(function () {
          var search = <%User.paginate(page: params[:page]).search('$(this).val();')%>
          $('#listeners').replaceWith(search)
      });
  </script>
<% end %>

<%= will_paginate %>

<ul class="users" id="listeners">
  <%= render @users %>
</ul>

搜索工作不是动态的。

4

2 回答 2

1

你在这里弄错了很多概念。Lemme 解释一下你想在这里做什么。但在我这样做之前,我强烈建议您先阅读一本好的 Rails 书籍,并在自己尝试之前尝试这些书中的几个应用程序。每个人都从你的水平开始。您尝试做的事情没有错:)。

首先:当页面第一次在浏览器中加载时,Ruby 代码只执行一次。您不能在 javascript 中使用 ruby​​。当您发送 HTML 页面作为对来自浏览器端的请求的响应时,您可以使用 Ruby 来呈现 javascript,而不是在此之后一次。所以你正在做的部分var search = <%User.paginate(page: params[:page]).search('$(this).val();')%>是不可能做的。

在开发之前,您需要正确理解这些概念。:) 所以买一本好的 Rails 书。

好的。

其次:我假设您的搜索工作正常,除了您的 keyup 要求。所以我猜你有你的控制器和模型。因此,让我向您解释 AJAX。

还记得我说过你只能执行 ruby​​ 代码,或者换句话说,当页面加载时只能调用 Rails 控制器一次吗?没错,但在 javascript 世界中有一个神奇的东西叫做 AJAX。这允许您在不加载页面的情况下调用 Rails 应用程序并获得响应!这正是您想要的。您正在尝试仅更新搜索结果。你不想重新加载整个页面。您只想在用户按下搜索字段上的键时更新结果。

使用 AJAX,您可以向服务器发出请求并获得响应。因此,在您的应用程序中,如果用户按下回车键或提交,请求将发送到搜索表单将提交的 URL。您将把什么作为参数传递给这个 URL?是的,你猜对了!搜索字段值。

好的,从这里开始你的概念:http ://railscasts.com/episodes/240-search-sort-paginate-with-ajax?view=comments

然后你就会知道该怎么做。

祝你好运。

于 2013-07-08T06:20:42.320 回答
0

var onChange = function ()
{
alert('检查更改...');
};
$(this).off('keyup').on('keyup', onChange);
$(this).off('paste').on('paste', onChange);
$(this).off('cut').on('cut', onChange);
$(this).off('undo').on('undo', onChange);
$(this).off('redo').on('redo', onChange);

于 2013-07-08T05:47:30.703 回答