我有一个控制器:
class RuleSearchController < ApplicationController
def index
end
def results
# Rule is a simple AR class with just a name column
@rules = Rule.all
end
end我在index.html.erb里有一张搜索表格
<%= form_tag('/rule_search_results', :id => 'search_form', remote: true) do %>
<%= submit_tag "Update" %>
<% end %>
<div id='search_results'>
<%= render partial: "results" %>
</div>然后,我有一个按照results.js.erb this answer添加的本地元素来传递我的搜索结果。
$('#search_results').html('<%= render partial: "results", locals: {rules: @rules} %>');问题是,虽然以下内容适用于_results.html.erb文件:
<ul><% for rule in rules do %><li><%= rule.name %></li><% end %></ul>以下代码相同,但在几行代码中没有:
<ul>
<% for rule in rules do %>
<li><%= rule.name %></li>
<% end %>
</ul>实际上,除了在_results.html.erb文件中使用一行之外,其他任何操作都不会导致任何事情发生。Chrome上的JS控制台没有错误,rails服务器正在运行的终端窗口没有错误,日志中也没有错误,它只是静悄悄地不起作用。
这个问题甚至发生在基本的HTML上,如果我把本地语言去掉,那也于事无补。
解决方案/解决办法是:
$('#search_results').html('<%= (render partial: "results", locals: {rules: @rules}).gsub("\n","").html_safe %>');虽然神经学家对我最初的问题的回答是正确的
发布于 2015-05-28 17:25:55
这是因为javascript不允许跨多行拆分字符串。例如,以下是有效的javascript:
$('#search_results').html('<div>foo</div>');但下列规定无效:
$('#search_results').html('<div>
foo
</div>');如果您已经获得了部分HTML,那么为什么不首先将其呈现在正确的位置,然后为其样式设置display: none,然后在需要时使用jQuery来显示元素呢?
https://stackoverflow.com/questions/30513093
复制相似问题