【问题标题】:Jquery will not fire document.ready in railsJquery 不会在 rails 中触发 document.ready
【发布时间】:2014-05-09 08:17:24
【问题描述】:

我无法让 jquery 为我的一生工作。我正在处理两个页面,都需要 javascript。

第一页是我的主页。它有简单的咖啡脚本来显示文档加载的警报

$(document).ready ->
 alert('ready')

第二页有自己的coffeescript,我不打算在这里粘贴。

当我加载主页时,此 document.ready 不会触发。但是,如果我加载第二页,它的代码和这个警报就会被触发。

这让我相信 jquery 没有被加载。所以我继续测试了一些东西

  1. jquery 是包含的第一个 javascript 文件,主页的 javascript 文件是包含的倒数第二个(最后一个是 application.js)。
  2. 第二页的脚本文件包含在首页的脚本文件之前
  3. 删除 turbolink 并不能解决问题。

所以我决定看看我能不能做点什么。

alert 'test'
$(document).ready ->
 alert('ready')

将在主页上触发“测试”警报。

此外,如果我在主页底部包含脚本标签并放入一些 jquery 以防止表单提交,它可以正常工作。下面是代码:

<script type="application/javascript">
  $("#formtest").submit(function(e){
  e.preventDefault();
  alert('No submit');
 });
</script>

然而,

<script type="application/javascript">
  $(document).ready(function(){
    alert('hello');
  });
</script>

还是不行。这告诉我没有为主页触发 DOM 加载事件。

编辑:

似乎 $(document).ready -> ... 在第二页的 javascript 中搞砸了这个。这是为什么呢?

【问题讨论】:

标签: javascript jquery ruby-on-rails coffeescript


【解决方案1】:

正如我在评论中提到的,一个对我有用的解决方案是让 jquery 事件也以这种方式触发:

$(document).on('page:load', yourFunctionHere)

另一个解决方案是安装以下 gem:

gem 'jquery-turbolinks'

使用该 gem 将允许您使用 DOM 加载事件来触发所有必要的 jquery 函数。

【讨论】:

  • 不幸的是 jquery-turbolinks gem 没有解决这个问题。我可以使用 $(document).on('page:load', alert 'lol') 获得要显示的警报,但我不能使用任何功能。
  • @user3389436:alert 'lol' 将在您调用 .on 时执行,而不是在 page:load 事件触发时执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
相关资源
最近更新 更多