link_to:确认显示两次弹出窗口

时间:2010-12-17 22:52:52

标签: ruby-on-rails

带有rails 3的标签

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

生成此html

<a href="/news/3" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>

该条目被删除,问题是弹出窗口出现两次。

导致这种情况的原因是什么?

15 个答案:

答案 0 :(得分:77)

我遇到了同样的问题,花了大半个小时来研究它。我在我的情况下找到了一个解决方案,我想我会分享它以防万一...

我的问题是我有

config.assets.debug = true 

config / environments / development.rb

将该行更改为

config.assets.debug = false

为我修复了确认复制件。我在this rails guide to asset pipeline中找到了相关信息。希望它有所帮助!

答案 1 :(得分:74)

听起来像rails.js中的确认处理程序Javascript被连接了两次。

您是否可能通过复制javascript_include_tag帮助程序而意外地包含两个rails.js副本?

答案 2 :(得分:44)

我习惯在我的haml-layout-file底部包含javascript_include_tag

使用Rails4和Turbolinks它会发生:

  • 第一次加载页面时一切正常(确认弹出窗口只出现一次)
  • 访问其他页面 - &gt;弹出窗口发生两次
  • 再访问一页 - &gt;弹出窗口发生三次
  • 直到我重新加载页面。

我通过将javascript_include_tag从底部移到<head>

来解决了这个问题

答案 3 :(得分:4)

我使用的是Rails 4并且没有一个答案对我有用,但以下工作......我改变了界限:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

<%= javascript_include_tag 'application', 'data-turbolinks-eval' => false %>.

https://github.com/rails/turbolinks/issues/244

答案 4 :(得分:1)

这似乎是Rails中的一个错误。显然,application.js中的指令不仅在启用调试模式时扩展为单个文件,而且还包含在application.js中。我没有看过Rails代码,但是假设它是由于application.js是默认的JavaScript文件。如果你将这个文件重命名为其他东西,让我们说default.js它将在调试模式下正确包含指令指定的文件,而default.js只会输出只在该文件中的JavaScript。因此不会生成重复的代码。

示例:

的application.js

// = require jquery_ujs

FOO();

结果:

1)jquery_ujs.js

2)application.js包含jquery_ujs内容和foo()


default.js

// = require jquery_ujs

FOO();

结果:

1)jquery_ujs.js

2)default.js with foo()

答案 5 :(得分:1)

我在Rails 3.2.12中遇到了同样的问题,但只是更新到3.2.13就解决了这个问题。

答案 6 :(得分:1)

我从另一篇文章中复制了此解决方案,但这对我有用(第5条)

“从rails_ujs中删除jquery_ujs,因为rails_ujs足以用于以后的rails版本。”

我包括: //= require jquery //= require jquery-ujs //= require rails-ujs

,将其删除后,一切正常。 来自Why am I getting a JQuery alert twice in Rails?

的解决方案

答案 7 :(得分:0)

就我而言(Rails 3.2.13),我不得不删除rails.js 来解决同样的问题。

我没有明确引用rails.js,也没有更改config.assets.debug帮助。

答案 8 :(得分:0)

在我的情况下,由于该行,jQuery被加载了两次 //= require_tree .

为了防止在application.js和application.css中出现此错误,我习惯于创建一个子目录app/assets/javascript/autorequire而不是require_tree .我做require_tree ./autorequire

因此,app/assets/javascriptapp/assets/stylesheets中的文件不再自动/意外地包含在内。我将所有单独的.css和.js文件放入子目录中,并隐式包含它们。但是我可以定义要包含顶部路径中的哪些文件以及按顺序包含哪些文件。

由于我这样做,我从来没有像我预期的那样没有加载资产的麻烦。

答案 9 :(得分:0)

对我而言,这是因为我已经定义了数据远程而不是远程。

IE

数据:{remote:true,...}

而不是

remote:true,data:{...}

希望有所帮助。

答案 10 :(得分:0)

在我的情况下,应用程序有两个&#34; mootools ujs&#34;和&#34; jquery ujs&#34;包括在内。我摆脱了一个mootools,现在我只看到一个确认。

答案 11 :(得分:0)

在这样的布局haml中,出现了两次弹出问题

---------------------------------------------------------------------------------------------------------------
| Id  | Operation          | Name                     | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
---------------------------------------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT   |                          |       |       |   147M(100)|          |        |      |
|   1 |  UPDATE            | TABLE1                   |       |       |            |          |        |      |
|   2 |   TABLE ACCESS FULL| TABLE1                   |    36M|  1648M|   224K  (1)| 00:00:09 |        |      |
|   3 |   REMOTE           | TABLE2                   |     1 |   106 |     1   (0)| 00:00:01 | DATA_~ | R->S |
---------------------------------------------------------------------------------------------------------------

然后我赞扬它,并且可以使用。

%head
  = stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload'
  = javascript_include_tag 'application', 'data-turbolinks-track': 'reload'
%body
  #calendar.calendarsize

答案 12 :(得分:-1)

只需删除在rails4中为我工作的turbolinks

答案 13 :(得分:-2)

尝试运行

rake assets:precompile ENV=development 

rake assets:precompile ENV=production

答案 14 :(得分:-4)

删除:

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

来自app/assets/javascripts/application.js。尽管有评论,它加载这些js文件。它对我有用。