Bootstrap 在 Rails 4 中使用 ajax 过滤后工具提示不起作用
Bootstrap tooltip is not working after filtering with ajax in Rails 4
我得到了一个显示 foo
的多个对象的索引页面,并在 gem ransack 和这个 ajax 脚本中集成了一个过滤功能:
$('#foo_search input').change(function(){
$.get($('#foos_search').attr('action'), $('#foos_search').serialize(), null, "script");
return false;
});
目前一切正常。之后,我在索引页面上显示的每个 foo
上添加了一个工具提示 bootstrap。 JS 代码如下所示:
$('[data-toggle="tooltip"]').tooltip();
索引页看起来像这样:
//index.html.erb
<div id="foos">
<%= render 'foos' %>
</div>
//_foos.html.erb
<% @foos.each do |f| %>
<div class="btn btn-default">
<span data-toggle="tooltip" data-html="true" data-placement="top" title="<% f.details.each do |d| %><li><%= d.name %></li><% end %>">
DETAILS
</span>
</div>
<% end %>
如您所见,每个 foo
都有一堆 details
,所有详细信息都应该显示在工具提示中。在我使用我的过滤器之前,它工作得很好。一旦我用 ransack 过滤 foo
s,JS 就会停止工作,并且在我重新加载页面之前不会显示任何工具提示。
对此有什么想法吗?
编辑:
我在 heroku 上上传了当前版本,所以也许你可以在那里看看。因为它是德语的,所以我会告诉你如何解决这个问题:
您会在亮黄色的 jumbtrons 中看到 foo
对象,如果您将鼠标悬停在 "Geeignet für" 上,您会看到弹出的工具提示。但是一旦您使用左侧的过滤器功能,工具提示将不再起作用,而是显示一些 html.
https://sheltered-escarpment-6887.herokuapp.com/list
编辑2:
这是在更改过滤器选项后重新加载部分内容:
//index.js.erb
$("#foos").html("<%= escape_javascript(render("foos")) %>");
编辑3:
谢谢 cassioscabral 我想通了:
//index.js.erb
$("#houses").html("<%= escape_javascript(render("houses")) %>");
$('[data-toggle="tooltip"]').tooltip();
您应该再次调用方法 $('[data-toggle="tooltip"]').tooltip();
以便它可以再次呈现工具提示。
我不明白为什么你的过滤器会影响它。也许它在搜索后呈现(并添加新的 dom 元素)部分,并且由于该元素将在您最初的 .tooltip()
调用之后添加,再次调用将是正确的方法,因为它基本上是说 'add the tooltip to all the elements with this data-toggle
, including the new ones'
我得到了一个显示 foo
的多个对象的索引页面,并在 gem ransack 和这个 ajax 脚本中集成了一个过滤功能:
$('#foo_search input').change(function(){
$.get($('#foos_search').attr('action'), $('#foos_search').serialize(), null, "script");
return false;
});
目前一切正常。之后,我在索引页面上显示的每个 foo
上添加了一个工具提示 bootstrap。 JS 代码如下所示:
$('[data-toggle="tooltip"]').tooltip();
索引页看起来像这样:
//index.html.erb
<div id="foos">
<%= render 'foos' %>
</div>
//_foos.html.erb
<% @foos.each do |f| %>
<div class="btn btn-default">
<span data-toggle="tooltip" data-html="true" data-placement="top" title="<% f.details.each do |d| %><li><%= d.name %></li><% end %>">
DETAILS
</span>
</div>
<% end %>
如您所见,每个 foo
都有一堆 details
,所有详细信息都应该显示在工具提示中。在我使用我的过滤器之前,它工作得很好。一旦我用 ransack 过滤 foo
s,JS 就会停止工作,并且在我重新加载页面之前不会显示任何工具提示。
对此有什么想法吗?
编辑:
我在 heroku 上上传了当前版本,所以也许你可以在那里看看。因为它是德语的,所以我会告诉你如何解决这个问题:
您会在亮黄色的 jumbtrons 中看到 foo
对象,如果您将鼠标悬停在 "Geeignet für" 上,您会看到弹出的工具提示。但是一旦您使用左侧的过滤器功能,工具提示将不再起作用,而是显示一些 html.
https://sheltered-escarpment-6887.herokuapp.com/list
编辑2: 这是在更改过滤器选项后重新加载部分内容:
//index.js.erb
$("#foos").html("<%= escape_javascript(render("foos")) %>");
编辑3: 谢谢 cassioscabral 我想通了:
//index.js.erb
$("#houses").html("<%= escape_javascript(render("houses")) %>");
$('[data-toggle="tooltip"]').tooltip();
您应该再次调用方法 $('[data-toggle="tooltip"]').tooltip();
以便它可以再次呈现工具提示。
我不明白为什么你的过滤器会影响它。也许它在搜索后呈现(并添加新的 dom 元素)部分,并且由于该元素将在您最初的 .tooltip()
调用之后添加,再次调用将是正确的方法,因为它基本上是说 'add the tooltip to all the elements with this data-toggle
, including the new ones'