Javascript 使用JS和Keyup在Rails 4中进行实时搜索
我有一个rails应用程序需要实时搜索(当用户键入时通过JS/Ajax显示结果)。这是我到目前为止写的代码 application.jsJavascript 使用JS和Keyup在Rails 4中进行实时搜索,javascript,ruby,ajax,ruby-on-rails-4,Javascript,Ruby,Ajax,Ruby On Rails 4,我有一个rails应用程序需要实时搜索(当用户键入时通过JS/Ajax显示结果)。这是我到目前为止写的代码 application.js $(function() { $("#email_search input").keyup(function() { $.get($("#email_search").attr("action"), $("#email_search").serialize(), null, "script"); return false; }); }); \
$(function() {
$("#email_search input").keyup(function() {
$.get($("#email_search").attr("action"), $("#email_search").serialize(), null, "script");
return false;
});
});
\u email.html.erb partial
<%= form_tag emails_path, :method => 'get', remote: true, :id => "email_search" do %>
<%= text_field_tag :search, params[:search], :placeholder => 'Search From, Subject, or Body, Hit Enter To Search', :class => 'form-control' %>
<% end %>
email.rb(搜索方法)
下面是发生的事情。我可以输入1-2个字母,它会调出结果,但之后就不会继续了,就像JS暂停一样。我禁用了setInterval计时器来轮询新消息,但它不工作。这确实令人沮丧,因为它在旧版本的Rails中工作,而不是在4.2.x系列中
这是turbolinks的问题吗?还是我需要以不同的方式编写JS?我也安装了jquery TurboLink,但这两种方式都没有什么不同
非常感谢您提供的任何帮助。从这里的代码片段很难判断,但我遇到了一个类似的问题,我将表单放置在索引页的替换部分。因此,我的表单将接受几个字符,直到AJAX有时间处理,然后它将用部分字符替换结果(包括我的表单)。它会“暂停”。将我的表格移到可替换区域之外修复了它
那可能只是我愚蠢的错误;而且很容易修复。但是我想我应该提到它。这里很难从片段中分辨出来,但是我遇到了一个类似的问题,我在索引页的替换部分中定位了我的表单。因此,我的表单将接受几个字符,直到AJAX有时间处理,然后它将用部分字符替换结果(包括我的表单)。它会“暂停”。将我的表格移到可替换区域之外修复了它
那可能只是我愚蠢的错误;而且很容易修复。但我想我应该提一下。我很高兴找到了我的旧帖子,我在Rails 5.1.3应用程序中遇到了类似的问题,并通过消除搜索表单的JS负载来解决了这个问题,该表单正在重新呈现,因此失去了焦点。我很高兴找到了我的旧帖子,我在Rails 5.1.3应用程序中遇到了一个类似的问题,并通过终止搜索表单的JS加载来解决了这个问题,该表单正在重新呈现,因此失去了焦点
<div id="emails">
<%= render "emails" %>
</div>
<script>
$(function() {
setInterval(function(){
$.getScript("/emails")
}, 30000);
});
</script>
$("#emails").html("<%= escape_javascript render("emails") %>");
respond_to :html, :js
def index
@emails = current_user.emails.search(params[:search]).order("created_at DESC")
end
def self.search(search)
if search
where('from_email ILIKE ? OR subject ILIKE ? OR body ILIKE ?', "%#{search}%", "%#{search}%", "%#{search}%")
else
all
end
end