Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未通过breadcrumbs链接连接JQuery事件处理程序_Javascript_Jquery_Ruby On Rails_Ruby On Rails 4_Coffeescript - Fatal编程技术网

Javascript 未通过breadcrumbs链接连接JQuery事件处理程序

Javascript 未通过breadcrumbs链接连接JQuery事件处理程序,javascript,jquery,ruby-on-rails,ruby-on-rails-4,coffeescript,Javascript,Jquery,Ruby On Rails,Ruby On Rails 4,Coffeescript,在我的Rails 4.1应用程序中,我使用JQuery ujs在我的commentsindex视图中更新表中的单元格。所以在我的comments.js.coffee文件中 jQuery -> $('tbody').on 'click', '.btn-info', -> $(this).closest('tr').children('td').eq(4).attr("id", "target") 以及相应的update.js.erb文件 当我点击这些链接中的任何一

在我的Rails 4.1应用程序中,我使用JQuery ujs在我的commentsindex视图中更新表中的单元格。所以在我的comments.js.coffee文件中

jQuery ->
    $('tbody').on 'click', '.btn-info', ->
      $(this).closest('tr').children('td').eq(4).attr("id", "target")
以及相应的update.js.erb文件

当我点击这些链接中的任何一个来获取视图时,页面被正确加载,但是检查显示没有点击处理程序附加到元素。但是,如果我重新加载页面,它将被附加

如何确保单击处理程序始终处于连接状态?

这是因为。如果您查看导轨,它会说明:

TurboLink将对页面发出Ajax请求,解析响应,并用响应的名称替换整个页面。我猜jquery代码应该在头部,因此它不会在单击链接时加载

问题的解决方案是将jquery代码封装在函数中,然后在页面加载时调用该函数,如下所示:

$(document).ready(your_function);
$(document).on('page:load', your_function);


您可以使用jquery turbolinks gem,它将Rails Turbolink事件绑定到document.ready事件,这样您就可以用通常的方式编写jquery了。有关更多信息,请查看我的答案

我认为我们遇到了相同的问题。Rails有一个名为Turbolinks的特性,它可以通过AJAX更快地加载页面,但这意味着AJAX插入的新DOM元素不会附加事件处理程序。我们的解决办法是关掉它们。否则,您将不得不侦听ajax事件并重新应用事件处理程序。感谢您的回复。事实上,我已经看到了你之前的帖子,但由于我的经验不足,未能在这里找到相关的帖子。非常感谢你费心回复。抱歉,这是一个已知的问题——新玩家的陷阱。我游弋着走过指南中简短的提及,它又回来咬我了。
<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>
$(document).ready(your_function);
$(document).on('page:load', your_function);