我正在编写 Rails 2.3.8 应用程序,并使用标准link_to
帮手。我有合理数量的链接,这些链接是使用 GET 以外的方法使用的,因此我传递了一个:method => :whatever
选项link_to
,它会生成一个带有 onclick 处理程序的链接,如下所示(为了便于阅读而添加了缩进):
<a
onclick="
var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
var s = document.createElement('input');
s.setAttribute('type', 'hidden');
s.setAttribute('name', 'authenticity_token');
s.setAttribute('value', '31M3q8SJkRz7f0R80l42Z2W7O2N7ZrzufhWQYql/Zd8=');
f.appendChild(s);
f.submit();
return false;"
href="/transactions/1015/transcribe"
>
Enter Data
</a>
现在,无论出于何种原因,IE(7 和 8 - 我测试过的两个)已经决定return false;
最后,没有足够的能力阻止它跟踪链接,我最终收到了两个对我的服务器的请求:来自 onclick 处理程序的 POST 请求,这是我想要的,以及来自链接本身的 GET 请求,这是我想要的不。事实上,除了 POST 请求之外,该路由不存在,因此当浏览器遵循 GET 请求时,用户会被转储到“错误 URL”错误屏幕上。不好。
有谁以前见过这个,可以告诉我是什么原因造成的吗?或者,更好的是,有人知道一个好的解决方法吗?
PS:我更喜欢NOT to
- 猴子补丁
link-to
, or
- 写我自己的版本
link_to
但如果这就是它所需要的,那就是它所需要的。我正在使用 jQuery 1.5.something,如果有帮助的话。
一般来说,当 IE 决定“忽略”某个return false;
从一个onclick
处理程序,这是因为之前的一行之一return false;
抛出异常。这将导致无声故障onclick
处理程序,然后浏览器将尝试访问href
关联。这适用于所有浏览器,而不仅仅是 IE,但通常情况下 IE 会在其他浏览器不会抛出异常的情况下抛出异常,因此为什么看起来只有 IE 忽略了return false;
.
对此的一个快速修补程序是设置href="#"
,即使onclick
处理程序失败。然而,调试它的正确方法是将你的onclick
类似的代码try { ... } catch (ex) { alert(ex); }
查看异常是什么,然后修复onclick
代码,使其不再抛出异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)