link_to 有个 method 属性,经常用来配合 :confirm 属性做删除链接的确认。
<%= link_to ' Delete', { :action => 'destroy'}, :confirm => "Delete this?", :method => :delete %>
其实就是在链接的 onclick 中创建了一个临时表单,提交请求,最后 return false,这样链接本身就不会被触发。
<a href="/uiok/3" onclick="if (confirm('确认吗')) {...};return false;">删除</a>
不过发现,在IE7下生成的链接,如果点击否的话,return false 并没有效果,不仅onclick中的表单提交,链接也触发了 。
那么为什么原来没有发现这个问题呢 ? 因为 Rails 生成的控制器代码中都会有这么一句:
verify :method => :post, :only => [ :destroy, :create, :update ],:redirect_to => { :action => :list }
问题就在于 IE 忽略了 return false 。
==================================
解决方法:
修改生成这个脚本的原始类,具体的路径根据你自己安装rails 的路径而定,找到url_helper.rb,增加红色标注部分:
module ActionView
module Helpers
module UrlHelper
private
def convert_options_to_javascript!(html_options, url = '')
...
when confirm && popup
"... ;event.returnValue = false; return false;"
when confirm && method
"... ;event.returnValue = false; return false;"
...
when method
"... return false;event.returnValue = false"
when popup
... + return false;event.returnValue = false''
...
end
end
end
原文:
http://galeki.is-programmer.com/2008/5/5/return-false-does-not-work-in-IE.2794.html