jquery.js和jquery-ujs.js的位置以及为什么销毁链接不起作用

时间:2012-01-03 01:47:35

标签: jquery google-chrome hyperlink ruby-on-rails-3.1 destroy

我有点困惑。在stackoverflow的很多问题中,我读到你需要jquery-ujs来管理你的javascript代码,特别是如果你想要这些破坏链接确实有效。如果我继续阅读所有安装说明,我必须说我无所事事。

因为我正在使用 Rails 3.1 ,所以我必须遵循:

要在Rails中自动安装,请使用“jquery-rails”gem。将其放在您的Gemfile中:
gem 'jquery-rails', '>= 1.0.12'
并运行: $ bundle install
下一步取决于您的Rails版本。

一个。对于 Rails 3.1 ,请将这些行添加到app / assets / javascripts / application.js文件的顶部:

//= require jquery
//= require jquery_ujs

但是对于 Rails 3.1 ,这已经在创建新的rails应用程序后完成。

如果我运行$ rails generate jquery:install,我会得到以下输出:

deprecated  You are using Rails 3.1 with the asset pipeline enabled, so this generator is not needed.
            The necessary files are already in your asset pipeline.
            Just add `//= require jquery` and `//= require jquery_ujs` to your app/assets/javascripts/application.js
            If you upgraded your app from Rails 3.0 and still have jquery.js, rails.js, or jquery_ujs.js in your javascripts, be sure to remove them.
            If you do not want the asset pipeline enabled, you may turn it off in application.rb and re-run this generator.

好的,没什么新鲜的。但为什么我的破坏链接仍然无效。所以我问自己问题这些jquery文件位于何处?当我读取另一个rails版本的jquery安装指令时,他们总是告诉我将这些文件(jquery.js,jquery-ujs.js)复制到特定位置。仅作为Ruby 3.1用户,您不必执行此操作。但为什么?我找不到这些文件。它们是jquery-rails gem的一部分吗?如果是,为什么我的销毁链接仍然不起作用?这真的是jquery的问题吗?我的意思是,如果我将帮助器从link_to更改为button_to它正在工作。那么只要它应该是jquery的一个问题怎么会发生呢?这对我来说可能没关系,但我不想使用表单按钮。此外,我无法相信像Rails这样的应用程序在其常见的生成模板中包含如此大的问题。

那么如何在不更改link_to帮助程序的情况下解决这个问题,而不必离开javascript(Railscast)?

更新1

  • 布局文件有<%= javascript_include_tag "application" %>
  • config.assets.enabled = true已设置

更新2

这里提到的破坏链接的来源:

<%= link_to 'Destroy', @post, confirm: 'Are you sure?', method: :delete %>

通常它应该删除帖子,但是浏览器会指向该帖子的位置,例如http://domain/posts/2
如果您使用button_to代替link_to而不是var ret = matches.call( node, expr );运行此功能,则可以使用它,但随后是表单按钮。

更新3

好的,破坏链接可以在Firefox中运行,但我是谷歌Chrome用户,我也想让它在那里工作。有解决方案吗?

更新4

Chrome Inspector在第5122行抛出DOMException:message: "SYNTAX_ERR: DOM Exception 12"

{{1}}

但是每个超链接都会发生此错误,无论它是否为销毁链接 destroy链接抛出 TypeError ,但我无法弄清楚它是来自jquery.js还是来自内置的chrome扩展。 jquery-ujs.js throws错误和消息是“你确定吗?”。这是rails为确认消息定义的文本。所以我删除了确认选项,然后删除工作。

如何在Chrome中使用确认选项?

4 个答案:

答案 0 :(得分:4)

jquery.js和jquery_ujs.js由资产管道和jquery-rails gem动态提供。它们不再存在于Rails 3.1应用程序的磁盘上。

您可以通过浏览器请求/assets/jquery.js/assets/jquery_ujs.js来验证是否正确投放了这些内容。确保他们返回JavaScript而不是404/500错误。

答案 1 :(得分:2)

好吧,我可以确认“更好的弹出窗口阻止程序”会导致这种行为..所以我怀疑其他具有类似功能的东西也会导致同样的问题。

从好的方面来说,使用上面的插件,你可以将http://localhost列入白名单,一切都按预期开始工作!

答案 2 :(得分:1)

看起来像是一个javascript错误......你可以:

  • 在heroku上发布我们可以看到的页面
  • 删除所有javascript代码,直至其有效,将其重新添加,直至失败

另外,请确保您没有两次包含jquery.js和jquery-ujs.js(就像您正在做的那样)。你曾经提到你有jquery.js和jquery-ujs.js的脚本标签......不要这样做。

相反,您的app / assets / javascripts / application.js应如下所示:

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

这将在app / assets / javascripts文件夹中添加jquery,jquery_ujs和所有javascripts。

答案 3 :(得分:0)

几周前,我刚停用了所有Chrome扩展程序,重新启动了Chrome,一切正常。我不知道在创建此问题时我使用的是哪些Chrome扩展程序。我唯一知道的是,有一个扩展程序扩展并破坏了javascript代码。这就是Chrome Inspector查看所有这些奇怪错误消息的原因。我不知道它确实是哪个特定的扩展,但它必须是流行的广告拦截或弹出窗口阻止扩展之一。只需停用所有Chrome扩展程序,并确定您的代码是否正常运行。