我正在尝试动态重做搜索,因为用户逐字符地将它们输入搜索字段。我对编程很新,所以我不知道我在做什么。谢谢你的帮助。
用户/索引视图:
<%= 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>
搜索工作不是动态的。
答案 0 :(得分:1)
你在这里弄错了很多概念。 Lemme解释你在这里想做什么。但是在我这样做之前,我强烈建议你在自己尝试之前先获得一本好的Rails书并尝试这些书中的几个应用程序。每个人都从你的水平开始。你想要做的事情没有错:)
首先:在浏览器中第一次加载页面时,Ruby代码只执行一次。你不能在javascript中使用ruby。您可以使用Ruby在发送HTML页面时根据需要呈现javascript,作为对浏览器端请求的响应,之后不再使用。所以你正在做的部分var search = <%User.paginate(page: params[:page]).search('$(this).val();')%>
是不可能的。
在开发之前,您需要正确理解这些概念。 :)所以得到一本好的铁杆书。
好的。
其次:我假设你的搜索工作正常,除了你的keyup要求。所以我猜你有你的控制器和模型。那么让我向你解释一下AJAX。
还记得当我说你只能执行ruby代码或换句话说只在页面加载时调用一次Rails控制器吗?这是真的,但这是一个在javascript世界中称为AJAX的神奇之物。这允许您调用Rails应用程序并在不加载页面的情况下获得响应!这正是你想要的。您正尝试更新搜索结果。你不想重新加载整个页面。您只想在用户按下搜索字段上的键时更新结果。
使用AJAX,您可以向服务器发出请求并获得响应。因此,在您的应用程序中,如果用户按Enter或提交,请求将是搜索表单将提交的URL。您将作为此URL的参数传递什么?是的,你猜对了!搜索字段值。
好好理解你的概念后,从这里开始:http://railscasts.com/episodes/240-search-sort-paginate-with-ajax?view=comments
然后你会知道该怎么做。
祝你好运。答案 1 :(得分:0)
var onChange = function()
{
警报('检查更改......');
};
$(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);