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:我宁愿不来
link-to,或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代码以使其不再抛出异常.
为了防止在JQuery中提交表单,我们经常使用
event.preventDefault();
Run Code Online (Sandbox Code Playgroud)
所以在你的例子中,你可以使用它(如评论中所讨论的):
$('a[onclick]').click(function(e) {e.preventDefault();});
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
10806 次 |
| 最近记录: |