【问题标题】:Rails 3 - Javascript :confirm not working for link_to and button_to with :method => :deleteRails 3 - Javascript:使用 :method => :delete 确认 link_to 和 button_to 不起作用
【发布时间】:2011-02-14 00:59:49
【问题描述】:

在我的 index.html.erb 文件中,我试图显示我的对象的标题(“列表”)以及正常的“显示”、“编辑”和“销毁”链接和/或按钮。使用 :method => :delete 和 :confirm => “你确定吗?”,link_to 或 button_to 都不会显示 javascript 确认框。这是我的 index.html.erb:

<h2><a href="#" onclick="alert('Hello world!'); return false;">Click Here for a Javascript test</a></h2>   
<table>  
  <tr>
    <th>List Title</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>    
<% @listings.each do |listing| %>
  <tr>
    <td><%= listing.title %></td>
    <td><%= button_to 'Show', listing %></td>
    <td><%= button_to 'Edit', edit_listing_path(listing) %></td>
    <td><%= button_to( 'Destroy', listing, 
                       :confirm => 'Are you sure?', :method => :delete)%> </td>
    <td><%= link_to "Destroy", listing, :confirm => "Are you sure?", :method => :delete %> </td>
  </tr>
<% end %>
</table>

列表顶部的“Hello World”JS 确认链接完美运行,所以我很确定不显眼的 javascript 对我的应用程序运行良好。 (我还确认我有必要的 - javascript_include_tag :defaults 和 csrf_meta_tag 在我的应用程序模板中。)Rails 文档确认我正在使用的参数是受支持的(url、:confirm、:method)。但是 button_to 或 link_to 都不会生成 :confirm 指示的 JS 警报。还有一点奇怪的是,在参数完全相同的情况下,button_to 会删除一条记录,而 link_to 不会。

任何关于如何调查以解决此问题的建议将不胜感激。

谢谢!

【问题讨论】:

  • 检查application/config.rb,看看你是否加载了你认为默认的JS文件。 (最近,当我尝试使用 jQuery 而不是 Prototype 制作一个 Rails 应用程序时,我被这点困扰了。默认值是空的。)

标签: javascript ruby-on-rails link-to


【解决方案1】:

在我不小心同时包含 Prototype 和 jQuery 之前,我遇到了这个确切的问题。检查正在加载的资源,以确保您没有以某种方式加载这两个框架。

【讨论】:

  • 感谢您的指点。我是一个 ruby​​ nube,但经过一番谷歌搜索后,我可以说我确实遇到了一些 javascript 配置问题。 1)我使用的 Rails 应用程序构建器将我的 jquery.js 文件放在“public/javascript”文件夹中,但在一个文件夹调用 jquery 中(我不得不将它上移一个级别。) 2)config/application.rb 文件有两个 javascript 配置行。我删除了一个并确保第二个指向上面提到的 jquery.js 文件。有了这些改变,一切都奏效了。
【解决方案2】:

AFAIK 这个问题是由于 link_to 选项引起的,当它的方法不是 GET(http 方法)时会导致问题,所以我使用 button_to 选项,它工作正常

【讨论】:

    【解决方案3】:

    我刚刚遇到了同样的问题,最新的 Rails 是最新的,并通过将:confirm 选项移动到link_to 参数的html_options 部分来解决它,例如:

    <%= link_to (t '.scenarios.open'), { :controller => 'scenarios', :action => 'show', :name => scenario.name }, :confirm => 'really?' %>
    

    确实,需要jquery-rails gem,但是那个已经在这里并且正确链接了。

    【讨论】:

      【解决方案4】:

      检查 Rails 的 用于 jQuery 的非侵入式脚本适配器 (jquery_ujs) 是否已加载到您的站点中,那么您无需担心第三方 javascript:

      // app/assets/javascript/application.js    
      //= require jquery_ujs
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        相关资源
        最近更新 更多