Rails 4:JQuery .ready not Firing

时间:2014-01-19 16:37:25

标签: javascript jquery ruby-on-rails

stackoverflow上的解决方案似乎没有在我的问题上工作,虽然我可能遗漏了一些基本的东西。我似乎无法在我的Rails 4应用程序中启动JQuery的.ready函数。

我在custom.js中尝试了以下解决方案:

1

$(document).on('ready page:load', function () {
  alert("hello, world")
});

2

var ready;
ready = function() {

  alert("Hello, world!")
};

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

3

$(function() {
  alert("Hello, world!")
});

4

window.onload=function(){ alert("Hello, javascript onload!") };

我的application.js清单看起来像这样:

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require custom
//= require plugins
//= require turbolinks
//= require_self
//= require_tree .

我的gemfile看起来像这样:

gem 'rails', '4.0.0'
gem 'jquery-rails'
gem 'jquery-turbolinks'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
gem 'bootstrap-sass', '2.0.0'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.0.1'
gem 'will_paginate', '3.0.3'
gem 'bootstrap-will_paginate', '0.0.6'
gem 'pg'
gem 'devise'

控制台日志显示:

 TypeError: $ is not a function application.js:22

生成的来源包括:

       <script src="/assets/jquery.js?body=1"></script>
<script src="/assets/jquery.turbolinks.js?body=1"></script>
<script src="/assets/jquery_ujs.js?body=1"></script>
<script src="/assets/custom.js?body=1"></script>
<script src="/assets/plugins.js?body=1"></script>
<script src="/assets/turbolinks.js?body=1"></script>
<script src="/assets/application.js?body=1"></script>

如果我把它放到custom.js中,它可以工作:

  alert("Hello, world!");

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

首先,我不建议将任何js代码添加到application.js,因为这是一个清单文件。只需创建一个新文件,例如core.js.coffee并尝试

$ -> alert 'Hello World!'

Rails中的链接获取所有js / coffee文件,并将它们放入生产中的压缩和缩小的单个文件中。

答案 1 :(得分:1)

我找到了解决方案。看起来我在assets文件夹中包含的jquery.js文件与jquery gem冲突。我删除了jquery文件,并将语法更改为:

$( document ).ready(function() { alert("Hello, world!") });