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:我不愿意

  1. Monkey-patch link-to ,或
  2. 写我自己的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中。