4

我在使用 jQuery on Rails 3.2.8 时遇到问题。我已经安装了 jquery-rails gem,并且我的 application.js 具有以下内容:

//= require jquery
//= require jquery_ujs
//= require_tree .

views/layouts/application.html.erb 有

<%= javascript_include_tag "application" %>

test.js 中的一个简单的 Javascript 测试:

if (jQuery) {
alert('Jquery is loaded')
} else {
alert ('Jquery is not loaded')
}

给我一个警报,告诉我 jQuery 确实已加载。

但是,没有 jQuery 命令可以工作,即使是基本命令也没有响应:

$(document).ready(function(){
 $("a").click(function(event){
 alert("Thanks for visiting!");
});
});

我已经尝试了一切——甚至通过 Google API 重新包含 jQuery。关于可能发生的事情有什么想法吗?

4

4 回答 4

2

修复!

在 application.html.erb 中,我改变了这两行的顺序:

<%= stylesheet_link_tag    "application", :media => "all" %>
<%= javascript_include_tag "application" %>

到:

<%= javascript_include_tag "application" %>
<%= stylesheet_link_tag    "application", :media => "all" %>

现在它起作用了!我不太清楚为什么,有人可以解释吗?

于 2012-11-02T11:27:11.017 回答
1

您可能想在您正在测试的浏览器中检查控制台。

在 jQuery 的情况下,$ 只是 jQuery 的别名,是否可以执行以下操作

jQuery(document).ready(function(){
   jQuery("a").click(function(event){
     alert("Thanks for visiting!");
   });
});

也许您在某处调用了 jQuery.noConflict() 并删除了别名?

http://api.jquery.com/jQuery.noConflict/

于 2012-11-02T11:12:01.163 回答
1

确保yieldapplication.html.erb. 如果您使用的是 Bootstrap,我认为默认application.rb会在 yield 之后加载 JS,这使得必须等到 jQuery 加载完毕后再在您的视图中运行它。

如果是这种情况,并且您不想在页面上将包含标记重新定位到更高的位置,则可以执行以下操作:

runScript();
function runScript() {
    if( window.$ ) { // Make sure jquery is loaded
         // your jquery code here
    } else {
        window.setTimeout(runScript, 100); // If not, wait 100 milliseconds and try again.
    }
}
于 2012-11-02T11:15:26.870 回答
0

虽然现在回答为时已晚,但我仍然会提供,因为我遇到了同样的问题并且浪费了 2 个小时。删除 js 文件中的注释,因为它们是 ruby​​ 注释而不是 js 注释。如果您删除它们并编写您的 js 代码,它会正常工作。

于 2013-08-31T12:08:20.250 回答