IE跟踪链接,即使在onclick="返回false;"
IE Follows Link Even After onclick="return false;"
我正在编写一个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:我喜欢不是,
- 猴子补丁
link-to
或 - 写自己的
link_to
版本
但如果那是必须的,那就是必须的。我用的是jQuery 1.5。如果有帮助的话。
一般来说,当IE决定"忽略"来自onclick
处理程序的return false;
时,这是因为return false;
之前的一行抛出了异常。这将导致onclick
处理程序静默失败,然后浏览器将尝试访问href
链接。这适用于所有浏览器,而不仅仅是IE,但通常情况下,IE会抛出异常的情况下,其他浏览器不会,因此为什么似乎只有IE是忽略return false;
。
一个快速的补丁是设置href="#"
,这将保持浏览器在页面上,即使onclick
处理程序失败。然而,调试它的正确方法是将onclick
代码包装在类似try { ... } catch (ex) { alert(ex); }
的代码中,以查看异常是什么,然后修复onclick
代码,以便它不再抛出异常。
为了防止JQuery中的表单提交,我们经常使用
event.preventDefault();
所以在你的例子中,你可以使用这个(在注释中讨论过):
$('a[onclick]').click(function(e) {e.preventDefault();});
希望有帮助!
我以前在IE遇到过这个问题,并发现一个有效的解决方案(我认为这是jQuery的event.preventDefault()在掩护下做的),是为正常浏览器做return false;
,但也为IE做event.returnValue = false;
(在实际的return
之前,显然)。IE会尊重的。
不幸的是,我不知道如何在不破坏它的情况下将其滑入link_to helper。这正是我来找的。:)
我认为您提交新表单的问题:
f.submit();
,你把它提交到你的链接href
f.action = this.href;
所以你是按照这个地址来的。您的链接返回false,但提交的表单将您引导到此位置。
所以你的link_to
是好的。
- 提供“;onClick"适用于iPad(触摸屏)和桌面用户的默认功能
- 改变“;onClick"这个jQuery的操作从清除输入文本改为将输入文本添加到下面的列表中
- "/"当onclick事件时从URL中删除
- onclick=“"javascript内联问题
- 编码"在Javascript onclick事件中被视为真正的双引号-为什么
- DHTMLX”;onEditCell”;事件在“”之后调用;onClick"按钮事件
- jQuery替换所有href=""其中onclick=“;window.location=“;
- 需要HTML表单检查=“"在onclick=“;window.print()”;
- 我可以检查onclick="使用jquery
- 如何将“;onClick"事件转换为javascript文件
- 获取调用其onclick中定义的JavaScript函数的元素(<a>")
- <输入类型=“;提交”;name=“;提交”;值=“;提交”;class=“;bt提交"onclick=
- 我的onClick事件没有设置“;selectedValue"用户选择的选项中的变量
- "TypeError:Math.Floor不是HTMLButtonElement.onclick中加载的函数(
- 按钮“”的onclick功能;搜索书籍"是't工作是因为我没有;没有收到任何警报..没有调用函数Sen
- 简单的jquery+javascript不起作用:add".有错误”;不工作,并且未定义onclick事件
- button1.Attributes.Add(“onclick"“javascript: window.open
- javascript点击一行并触发该行"onclick”;事件
- "OnClick”;通过JavaScript创建的事件会立即触发,而不是在单击对象时触发
- 使onclick功能与ENTER一起工作;Go"Safari Mobile(iOS)上的按钮