IE跟随链接甚至在onclick =“return false;”之后
我正在编写一个Rails 2.3.8应用程序,并使用标准的link_to
帮助程序。 我有一个合理数量的链接用户方法而不是GET,所以我传递一个:method => :whatever
link_to
选项如何,它都会生成一个带有onclick处理程序的链接,如此(为了便于阅读,添加了缩进):
Enter Data
现在,无论出于何种原因,IE(7和8 – 我测试过的两个)已经决定return false;
最后没有足够的东西阻止它跟随链接,我最终得到两个请求到我的服务器:来自onclick处理程序的POST请求,我想要的,以及来自链接本身的GET请求,我别。 实际上,除了POST请求之外,该路由不存在,因此当浏览器遵循GET请求时,用户将被转储到“错误URL”错误屏幕上。 不好。
有没有人见过这个,可以告诉我是什么造成的? 或者,更好的是,有没有人知道一个好的解决方法?
PS:我不愿意
- Monkey-patch
link-to
,或 - 写我自己的
link_to
版本
但如果这就是它需要的东西,那就是它需要的东西。 我正在使用jQuery 1.5.something,如果这有帮助的话。
为了防止在JQuery中提交表单,我们经常使用
event.preventDefault();
所以在你的例子中,你可以使用它(如评论中所讨论的):
$('a[onclick]').click(function(e) {e.preventDefault();});
希望有所帮助!
通常,当IE决定“忽略” return false;
从一个onclick
处理程序,它是因为return false;
之前的一行return false;
抛出一个例外。 这将导致onclick
处理程序的静默失败,然后浏览器将尝试访问href
链接。 这适用于所有浏览器,而不仅仅是IE,但通常情况下,IE会在其他浏览器不支持的情况下抛出exception,因此看起来只有IE忽略了return false;
。
一个快速补丁是设置href="#"
,即使onclick
处理程序失败,它也会使浏览器保持在页面上。 然而,调试它的正确方法是将你的onclick
代码包装成try { ... } catch (ex) { alert(ex); }
查看exception是什么,然后修复onclick
代码,使其不再抛出exception。
我以前遇到过IE的这个问题,并发现一个有效的解决方案(我相信是jQuery的event.preventDefault()在封面下做的)是两个都return false;
对于普通浏览器,还有event.returnValue = false;
(在实际return
之前,显然)对于IE。 IE会尊重这一点。
不幸的是,我不知道如何在没有黑客攻击的情况下将其放入link_to助手。 这就是我来这里寻找的东西。 🙂
我相信您提交新表格的问题:
f.submit();
并且您正在将其提交给您的链接href
f.action = this.href;
所以你在这个地址。 您的链接返回false,但是提交的表单会将您引导至此位置。
所以你的link_to
。 问题出在您的奇怪的JavaScript中。