Javascript IE即使在onclick=";返回false&引用;
我正在编写一个Rails 2.3.8应用程序,并使用标准的Javascript IE即使在onclick=";返回false&引用;,javascript,jquery,ruby-on-rails,internet-explorer,Javascript,Jquery,Ruby On Rails,Internet Explorer,我正在编写一个Rails 2.3.8应用程序,并使用标准的链接到助手。我有一个合理数量的链接供用户方法获取,因此我将:method=>:which选项传递给link\u to,它会生成一个带有类似onclick处理程序的链接(添加缩进以提高可读性): 现在,不管出于什么原因,IE(7和8都是我测试过的两个)已经决定返回false最后,没有足够的资源阻止它跟踪链接,我最终收到两个到服务器的请求:来自onclick处理程序的POST请求(我需要),以及来自链接本身的GET请求(我不需要)。事实上
链接到助手。我有一个合理数量的链接供用户方法获取,因此我将:method=>:which
选项传递给link\u to
,它会生成一个带有类似onclick处理程序的链接(添加缩进以提高可读性):
现在,不管出于什么原因,IE(7和8都是我测试过的两个)已经决定返回false代码>最后,没有足够的资源阻止它跟踪链接,我最终收到两个到服务器的请求:来自onclick处理程序的POST请求(我需要),以及来自链接本身的GET请求(我不需要)。事实上,除了POST请求之外,该路由不存在,因此当浏览器跟随GET请求时,用户将被转储到“坏URL”错误屏幕上。不太好
有没有人见过这种情况,能告诉我是什么原因造成的?或者,更好的是,有人知道一个好的解决方法吗
PS:我宁愿不
猴子补丁链接到
,或
编写自己版本的链接到
但如果这就是需要的,那就是需要的。如果有帮助的话,我正在使用jQuery 1.5.something。我认为您提交新表单的问题在于:
f.submit();
您正在将其提交到您的链接href
f.action = this.href;
所以你是按照这个地址来的。您的链接返回false,但提交的表单会将您引导到此位置
所以你的链接到是可以的。问题出在奇怪的javascript中。通常,当IE决定“忽略”一个时,返回false来自onclick
处理程序的code>,这是因为前面的一行返回false代码>引发了异常。这将导致onclick
处理程序出现无声故障,然后浏览器将尝试访问href
链接。这适用于所有浏览器,不仅是IE,而且IE通常会在其他浏览器不会出现异常的情况下抛出异常,因此似乎只有IE忽略了返回false代码>
对此的一个快速补丁是设置href=“#”
,即使onclick
处理程序失败,浏览器也会保持在页面上。然而,调试它的正确方法是将onclick
代码包装成类似于try{…}catch(ex){alert(ex);}
的东西,以查看异常是什么,然后修复onclick
代码,使其不再抛出异常。为了防止JQuery中的表单提交,我们经常使用
event.preventDefault();
因此,在您的示例中,您可以使用以下内容(如注释中所述):
希望有帮助 我以前在IE上遇到过这个问题,并且发现一个有效的解决方案(我相信jQuery的event.preventDefault()就是这样做的),就是同时执行返回false代码>适用于普通浏览器,但也适用于event.returnValue=false代码>(显然,在实际的返回之前)用于IE。IE将尊重这一点
但不幸的是,我不知道如何在不进行黑客攻击的情况下将其插入到“指向助手的链接”中。这正是我来这里想要的 这里最大的问题是内联javascript。这并不是说它没有条理,而是至少把它包装成一个函数。很难看,我很惊讶在发布表单后会出现任何其他问题。在发布表单之前,是否可以尝试在事件对象上设置默认值?也同意在中添加函数。编辑:啊,没有真正处理生成这个的链接。@fl00r-如果是我写的,它会是。不幸的是,这是Rails的link_to
helper(如果您使用的是HTTP动词而不是GET)的输出,我希望避免编写自己的。问题在于您正在提交表单。提交表单会将您重定向到与href相同的操作。我不确定这是否适合ruby世界。。。但是在JQuery中,我们经常使用“event.preventDefault();”来阻止表单提交。我不确定你对点击事件中生成的代码有多大的控制权,但你认为这有用吗?这是正确的地址,应该在表单提交(POST请求)后“跟随”。问题是,在提交表单后,IE会使单击事件保持活动状态,浏览器最终会执行第二个(错误的)GET请求,返回false应该阻止的。哦,我知道了。很奇怪。但我需要做些测试!示例代码是:post%>
的输出。这就是为什么这个问题如此令人恼火的原因(除了必须使用IE):我不能在不修改Rails的情况下修改JS,我真的不想这么做。2.3.8(尽管我开始认为这个bug完全是在其他地方——可能是标签不匹配之类的无关紧要的东西)支持一些优秀的建议。不幸的是,Rails生成JS的事实让它们变得很困难:我无法更改HREF,因为Rails的JS在表单操作中使用HREF。我将尝试用我自己的JS将处理程序包装在一个try/catch块中,并返回结果…嗯。经过多次试验,我终于把它包装好了,但没有发现任何异常。即使我用简单的“return false”替换了处理程序(仍然忽略了它)。我会继续寻找…我得到IE执行的链接在事件处理程序中只有onclick=“return false”
,因此它不是[仅]onclick处理程序中的异常。在本例中,锚的id
是“未定义的”(当我在Firebug中查看时动态生成的html--id=“未定义的”
),这是不直观的。html被生成并写入屏幕(通过它的呈现(即跟踪链接的URL)来证明),但之前的异常似乎一直存在。Happe
event.preventDefault();
$('a[onclick]').click(function(e) {e.preventDefault();});