2013-02-27 139 views
0

我有一个在rails应用程序上使用.keyup方法的搜索函数。我知道该电话正在工作,因为我输入的第一个字母是搜索并显示结果。如果我继续输入,则不会继续搜索该方法。这是我的jquery下面和我的rails视图的一部分,它正在调用。ajax .keyup搜索功能

JQuery的

$("input#search").keyup(function(){ 
    $.get($("#verified_search").attr("action"), $("#verified_search").serialize(), null, "script"); 
    return false; 
}); 

index.js.erb的

$(".results").html("<%= escape_javascript(render("search")) %>"); 

index.html.erb视图

<%= form_tag admin_view_index_path, :method => 'get', :id => 'verified_search' do %> 
      <%= text_field_tag :search, params[:search] %> 
      <%= submit_tag "Search", :name => :nil %> 
<% end %> 

<%= render 'search' %> 
+0

如果继续输入新的请求是否发送到服务器? – 2013-02-27 15:41:13

+0

你必须做的一件事就是在发送新的请求之前“终止”以前的搜索,如果需要的话 – 2013-02-27 15:41:59

+0

有请求被发送但没有信息。在我最初的搜索中,我的第一个字母是“j”。它给了我参数:{“search =>”j“,”_“=>”1361982841588“}在下一个字母类型中,它更新我的服务器,但参数中没有任何信息参数:{”_“= > “1361982850183”} – 2013-02-27 16:36:20

回答

0

使用.live()

$("input#search").live('keyup', function(){ 
    $.get($("#verified_search").attr("action"), $("#verified_search").serialize(), null, "script"); 
    return false; 
}); 

当您更换的index.js.erb的$('.results')的内容,与那些元素相关联的所有听众都不见了。

http://api.jquery.com/live/

编辑:由于它的链接表示,该.live()方法已在jQuery 1.7。使用.on()附加事件处理程序。旧版本jQuery的用户应优先使用.delegate()而不是.live()

+0

即使在第一个字母输入后使用.live功能,它也会执行搜索,但不会继续更新内容。其实更详细的描述是我输入我的第一个字母后,让我们说“J”。它给了我结果,如果我输入更多,即“ja”它会清除我的搜索并加载原始页面并停止搜索。 – 2013-02-27 16:33:20

+0

我也用过.on()和“submit”事件。它只允许一次搜索。我相信它正在加载什么地方。当我做的时候。on(“submit”,....)它执行一次ajax函数,然后当我输入搜索另一个名称时,它不会搜索任何内容。 – 2013-02-27 18:13:02

0

试试这个

$(document).on("keyup", "#verified_search", function(){ 
     $.get($("#verified_search").attr("action"), $("#verified_search").serialize(), null, "script"); 
     return false; 
    });