【发布时间】:2014-08-03 14:13:22
【问题描述】:
在我的 Rails 4.1 应用程序中,我使用 JQuery-ujs 更新 comments#index 视图中表格中的单元格。所以在我的comments.js.coffee 文件中,我有
jQuery ->
$('tbody').on 'click', '.btn-info', ->
$(this).closest('tr').children('td').eq(4).attr("id", "target")
以及对应的update.js.erb文件
$('#target').html("<%=j @comment.state.humanize %>").removeAttr("id")
视图通过/comments/pending、/comments/confirmed 等形式的自定义路由将不同的 cmets 组呈现到表中,只要我直接在浏览器地址栏中请求视图,一切都会顺利进行。
但我在页面上也有通过link_to helpers 生成的面包屑链接:
<ol class="breadcrumb">
<li class="active">
<a href="/comments/pending">pending</a>
</li>
<li>
<a href="/comments/confirmed">confirmed</a>
</li>
<li>
<a href="/comments/notable">notable</a>
</li>
<li>
<a href="/comments/eminent">eminent</a>
</li>
</ol>
当我单击这些链接中的任何一个以获取视图时,页面已正确加载,但检查显示没有 单击处理程序 附加到 <tbody> 元素。 (如果我重新加载页面,它会附上。)
如何确保始终附加点击处理程序?
【问题讨论】:
-
我认为我们遇到了同样的问题。 Rails 有一个名为“Turbolinks”的“功能”,它将 AJAX 加载页面(更快),但这意味着由 AJAX 插入的新 DOM 元素不会附加事件处理程序。我们的解决方案是关闭它们。否则,您将不得不监听 ajax 事件并重新应用事件处理程序。
-
感谢您的回复。我实际上已经看过您之前的帖子,但由于我的经验不足,我未能在此处提及它。
标签: javascript jquery ruby-on-rails ruby-on-rails-4 coffeescript