Javascript Firefox自版本18以来的Bug

Javascript Firefox自版本18以来的Bug,javascript,jquery,jsf,firefox,richfaces,Javascript,Jquery,Jsf,Firefox,Richfaces,我正在使用Java服务器面、JQuery和JavaScript。我想我在Firefox中发现了一个bug。 以下JavaScript代码被触发: var list = jQuery('input.myclass'); var item = list.eq(0); item.click(); top.location.reload(true); 单击将点击一个与我的操作方法“mybean.myaction()”相关的a4j:commandButton。如果我使用的是Firefox19或Firef

我正在使用Java服务器面、JQuery和JavaScript。我想我在Firefox中发现了一个bug。 以下JavaScript代码被触发:

var list = jQuery('input.myclass');
var item = list.eq(0);
item.click();
top.location.reload(true);
单击将点击一个与我的操作方法“mybean.myaction()”相关的a4j:commandButton。如果我使用的是Firefox19或Firefox18,可能会点击按钮。无论如何,重新加载页面的速度太快。我可以通过在mybean.myaction()中设置Eclipse断点看到这一点-从未到达该断点

如果我使用的是Firefox 17,InternetExplorer会像预期的那样工作,Javascript会被触发,点击会发生,bean方法会调整bean的状态,页面会被重新加载

提前感谢您为我提供了一些如何澄清这种行为原因的想法。如果合适,我将在Firefox bugzilla中提交一个bug

更新:这是JQuery单击的a4j:commandButton

<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass">
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" /></a4j:commandButton>

更新3:它变得越来越陌生。。。如果我在item.click()和top.location.reload之间设置了Firebug断点(true);一切顺利!因此,问题可能出在a4j上。也许今天辞职是明智的。谢谢你到现在为止的帮助

这不是对这个问题的回答,而是对如何解决这个问题的建议。因此,您可以在操作完成后使用commandButton的oncomplete属性重新加载页面:

<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass" oncomplete="top.location.reload(true);">
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" />   
</a4j:commandButton>

通过这种方式序列化事件:首先调用操作,并且仅在重新加载页面之后。当然,您需要删除
top.location.reload(true)来自javascript代码


编辑:更多地思考问题。。。在我看来,这并不是一只虫子。Firefox无需在任何地方等待,直到您的点击事件(Richfaces的复杂操作)在服务器上处理完毕。它将click事件分派给RichFacesJavaScript,并转到下一条语句:
top.location.reload(true)。您需要防止此问题。

给定的代码看起来不错。我认为事件处理程序有一些异步行为,这会导致您的问题。你能告诉我们点击项目时会发生什么吗?看起来你在这里使用的是Richfaces。它自带了自己的jQuery嵌入式版本。您使用的是哪个版本的Richfaces?我使用的是Richfaces 3.3.x,当然这已经很旧了,但是JQuery.click()应该可以工作(在我们应用程序的所有其他区域都可以正常工作)。我认为问题在于重新加载页面的时间太早。此外,我在Firebug控制台中看不到Javascript错误。您可以创建一个公共测试用例,然后在我上次测试后对其进行测试和比较,以隔离问题(更新-2)。我怀疑top.location是问题的原因。
<a4j:commandButton action="#{mybean.myaction}" value="setMyVal" styleClass="hidden myclass" oncomplete="top.location.reload(true);">
    <a4j:actionparam name="myparamname" value="MY_VAL" assignTo="#{mybean.myattr}" />   
</a4j:commandButton>