关于javascript:轨4:JQuery .ready不触发

Rails 4: JQuery .ready Not Firing

在这里,关于stackoverflow的任何解决方案似乎都无法解决我的问题,尽管我可能会缺少一些基本知识。我似乎无法在Rails 4应用程序中触发JQuery的.ready函数。

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

1.

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

2.

1
2
3
4
5
6
7
8
var ready;
ready = function() {

  alert("Hello, world!")
};

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

3.

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

4.

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

我的application.js清单如下所示:

1
2
3
4
5
6
7
8
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require custom
//= require plugins
//= require turbolinks
//= require_self
//= require_tree .

我的gemfile看起来像这样:

1
2
3
4
5
6
7
8
9
10
11
12
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'

控制台日志显示:

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

生成的来源包括:

1
2
3
4
5
6
7
       <script src="/assets/jquery.js?body=1">
<script src="/assets/jquery.turbolinks.js?body=1">
<script src="/assets/jquery_ujs.js?body=1">
<script src="/assets/custom.js?body=1">
<script src="/assets/plugins.js?body=1">
<script src="/assets/turbolinks.js?body=1">
<script src="/assets/application.js?body=1">

如果我将其放入custom.js,它将起作用:

1
  alert("Hello, world!");

谢谢您的帮助!


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

1
$ -> alert 'Hello World!'

Rails中的链轮将您的所有js / coffee文件放入生产中的压缩且缩小的单个文件中。


我想出了一个解决方案。看来我包含在Assets文件夹中的jquery.js文件与jquery gem冲突。我删除了jquery文件,并将语法更改为:

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