2013-03-12 51 views
0

我正在使用Java Server Faces,JQuery和JavaScript。我想我在Firefox中發現了一個錯誤。 這段JavaScript代碼被觸發:Firefox版本18以來的Bug

var list = jQuery('input.myclass'); 
var item = list.eq(0); 
item.click(); 
top.location.reload(true); 

的點擊會打一個A4J:的commandButton這是關係到我的行動方法「mybean.myaction()」。如果我使用的是Firefox 19或Firefox 18,則可能點擊該按鈕。無論如何,重新加載頁面發生得太快。我可以通過在mybean.myaction()中設置Eclipse斷點來看到這一點 - 從未達到斷點。

如果我使用的是Firefox 17,InternetExplorer都像預期的那樣工作,Javascript被觸發,點擊發生,bean方法調整bean的狀態並重新加載頁面。

在此先感謝給我一些想法如何澄清此行爲的原因。如果合適,我會在Firefox bugzilla中提交一個錯誤。

更新:這是ajj:commandButton被JQuery點擊;

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

UPDATE-2:我一直在玩弄隔離問題。我在代碼塊周圍放置了try-catch-statement,而且我替換了reload(),以便能夠執行javascript執行。現在,我可以看到,如果我輸入top.location.host,我會跳到catch-block,但是我的errorText是'undefinded'。這怎麼會發生?我需要做些什麼才能找出更多這種例外情況?

try{ ... 
    item.click(); 
    // Firefox-Bug in Version ab 18.0.1 
    var res = top.location.host; //top.location.reload(true); 
} catch (e) { 
    var errorText = e.message; // errorText is undefined! 
    alert("Exception: " + errorText); 
} 

UPDATE-3:它得到陌生人和陌生人......如果我設置一個螢火蟲,斷點item.click()和top.location.reload(真)之間;一切順利!因此,也許問題是a4j。今天退出也許是明智的。感謝您的所有幫助!

+0

給定的代碼看起來不錯。我認爲事件處理程序有一些異步行爲,導致你的問題。你能告訴我們什麼時候點擊項目? – 2013-03-12 16:49:54

+1

看來你在這裏使用Richfaces。它帶有自己的jQuery嵌入式版本。您使用的是什麼版本的Richfaces? – dcernahoschi 2013-03-12 17:03:22

+0

我使用的是RichFaces 3.3.x,當然這很舊,但JQuery.click()應該可以工作(並且在我們的應用程序的所有其他區域中工作正常)。我認爲問題在於重新加載頁面發生得太早。此外,我無法在我的Firebug控制檯中看到Javascript錯誤。 – Jochen 2013-03-12 17:10:52

回答

2

這不完全是對問題的回答,而是對如何解決問題的建議。所以,你可以在完成動作後,使用命令按鈕的屬性的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> 

這樣你序列化事件:重新加載頁面的第一個動作被稱爲後只。當然,您需要從您的JavaScript代碼中刪除top.location.reload(true);

編輯:更多地思考問題......在我看來,這不是一個錯誤。在任何地方都不需要使用Firefox,直到在服務器上處理您的單擊事件(Richfaces情況下爲複雜操作)爲止。它將點擊事件分發給Richfaces JavaScript,並轉到下一個語句:top.location.reload(true);。你需要防止這個問題。

+0

在我最後一次測試來隔離問題(update-2)後,我懷疑top.location是導致問題的原因。 – Jochen 2013-03-12 18:01:22

+0

謝謝dcernahoschi你的答案解決了這個問題。 – Jochen 2013-03-13 10:40:30