Javascript IE即使在onclick=";返回false&引用;

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请求(我不需要)。事实上

我正在编写一个Rails 2.3.8应用程序,并使用标准的
链接到
助手。我有一个合理数量的链接供用户方法获取,因此我将
: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决定“忽略”一个
    时,返回falseonclick
    处理程序的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();});