好的,所以我看到这个问题是由jQuery或Prototype的多个链接引起的,但我可以确认我只在整个页面链接到jQuery 一次.我的问题是:当我link_to确认删除时,弹出窗口显示两次.这是我模板中的适用代码(用Slim编写):
link_to('Destroy', depot_path(@depot.id), :confirm => "Really?", :method => :delete)
Run Code Online (Sandbox Code Playgroud)
我运行的Rails 3.1.0与资产管道打开,用gem 'jquery-rails'在我Gemfile,下面是我的application.js文件(这是由链轮的资产管道编译).
//= require jquery
//= require jquery_ujs
//= require 'underscore'
//= require 'backbone'
Run Code Online (Sandbox Code Playgroud)
我underscore.js和backbone.js我的/vendor/assets/javascripts/目录中,链轮似乎找到了那些没关系.我还搜索了application.jssprockets提供的文件,jQuery只在那里一次,而jQuery UJS只在那里一次.当我的页面呈现时,这就是我的头部样子(我省略了csrf-token显示的值,FWIW).
<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title>Administration</title>
<link href="/assets/screen.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/assets/application.js" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="--token--omitted--" name="csrf-token" />
<script src="/assets/common/subdata.js" type="text/javascript"></script>
<link href="/assets/show.css" media="screen" rel="stylesheet" …Run Code Online (Sandbox Code Playgroud) jquery ruby-on-rails ruby-on-rails-3.1 sprockets asset-pipeline
我有一个典型的CRUD操作应用程序
包含一行的apps/views/recipe/show.html.haml
= link_to "Delete", recipe_path, method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"
Run Code Online (Sandbox Code Playgroud)
如果我在apps/views/recipe/new.html.haml中创建一个新配方并重定向到apps/views/recipe/show.html.haml并点击Delete,那么它会给我一次确认并删除配方.
但是,如果我从典型类型的index.html.haml转到同一个显示页面,链接到单个配方,如http:// localhost:3000/recipes/29并点击删除按钮,确认将弹出3-4时间..(除非我首先刷新该页面,然后它会弹出确认一次).
我尝试添加jQuery-turbolinks,它仍然无法正常工作......
app/views/layouts/application.html.haml在%title下面有以下内容
= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
= javascript_include_tag 'application', 'data-turbolinks-track' => true
= csrf_meta_tags
Run Code Online (Sandbox Code Playgroud)
不知道如何解决它,所以它不会弹出几次
编辑:即使我通过传递@recipe修复代码后仍然是相同的行为
= link_to "Delete", recipe_path(@recipe), method: :delete, data: {confirm: "Are you sure?" }, class: "btn btn-default"
Run Code Online (Sandbox Code Playgroud)
编辑2: 如果我一起删除turbolinks它的工作原理buttTurbolinks在你的web应用程序中更快地生成以下链接,据我所知在大多数Rails项目中使用.所以试着看看是否有解决方法?看起来像是一件非常典型的事情.
编辑3:
我添加了jQuery-turbolinks
的Gemfile
gem 'jquery-turbolinks'
Run Code Online (Sandbox Code Playgroud)
JavaScript清单文件,按此顺序:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
Run Code Online (Sandbox Code Playgroud)
确认不止一次弹出.必须有办法解决它?
编辑4: …
我对删除链接有 jquery 确认。当您单击该链接时,确认会弹出,但是当您单击“确定”时,它会再次弹出。我不明白为什么。除了必须单击“确定”两次之外,该方法工作正常并且帖子被删除。
show.html.haml
%h1= @post.title
%p= @post.description
%p= link_to 'Back', root_path
%p= link_to 'Edit', edit_post_path
%p= link_to 'Delete', @post, method: :delete, data: { confirm: 'Are you sure you want to delete this Post?' }
Run Code Online (Sandbox Code Playgroud)
posts_controller.rb
class PostsController < ApplicationController
before_action :find_post, only: %i[show edit update destroy]
.
.
.
def destroy
@post.destroy
redirect_to root_path, notice: 'Post successfully deleted.'
end
.
.
.
def find_post
@post = Post.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
Gemfile
gem 'bootstrap-sass', '~> 3.3', '>= 3.3.7'
gem 'coffee-rails', '~> …Run Code Online (Sandbox Code Playgroud)