IE跟随链接甚至在onclick ="return false;"之后

Xav*_*olt 7 javascript jquery internet-explorer ruby-on-rails

我正在编写一个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>
Run Code Online (Sandbox Code Playgroud)

现在,无论出于何种原因,IE(7和8 - 我测试的两个)已经决定return false;最终没有足够阻止它跟随链接,我最终得到两个请求到我的服务器:来自我想要的onclick处理程序的POST请求,以及来自链接本身的GET请求,我没有.实际上,除了POST请求之外,该路由不存在,因此当浏览器遵循GET请求时,用户将被转储到"错误URL"错误屏幕上.不好.

有没有人见过这个,可以告诉我是什么造成的?或者,更好的是,有没有人知道一个好的解决方法?

PS:我宁愿

  1. 猴子补丁link-to,或
  2. 写我自己的版本 link_to

但如果这就是它需要的东西,那就是它需要的东西.我正在使用jQuery 1.5.something,如果这有帮助的话.

aro*_*oth 12

通常,当IE决定return false;onclick处理程序中"忽略"a时,这是因为return false;抛出异常之前的一行.这将导致onclick处理程序的静默失败,然后浏览器将尝试访问该href链接.这适用于所有浏览器,而不仅仅是IE,但通常情况下,IE会在其他浏览器不支持的情况下抛出异常,因此为什么看起来只有IE忽略了return false;.

一个快速补丁就是设置href="#",即使onclick处理程序失败,它也会使浏览器保持在页面上.然而,调试它的正确方法是将onclick代码包装成类似于try { ... } catch (ex) { alert(ex); }查看异常的内容,然后修复onclick代码以使其不再抛出异常.


Chr*_*ers 6

为了防止在JQuery中提交表单,我们经常使用

event.preventDefault();
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中,你可以使用它(如评论中所讨论的):

$('a[onclick]').click(function(e) {e.preventDefault();});
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!