2012-07-30 22 views
0

所以這裏是我的問題。我試圖從後端獲取值並去除值中不需要的文本。所以基本上我得到了一種顏色,顏色名稱的末尾有一個或兩個星號。我將該值發送給JavaScript函數,並刪除字符串中可能存在的任何星號。到目前爲止,這對我來說工作得很好。我發現另一個位置發生了這種情況,當我嘗試做同樣的事情時,它不起作用。該字符串帶星號,我刪除它們並用新字符串替換html,並在短時間內運行,然後原始字符串返回。似乎無法改變h:outputText「值」,甚至是值表達式,使用JavaScript/jQuery

所以,這裏有一些細節。在我正在處理的應用程序中,有一個鏈接,點擊後會打開一個Richfaces模式窗口。然後,有一個表格填充了來自網站的各種引用。每行末尾都有一個「查看」鏈接,用於查看報價的詳細信息。點擊時,它會打開另一個模式,其中包含客戶需要引用的每種產品,顏色,大小和其他信息的表格。在「查看」鏈接代碼中有一個onclick,這是我把我的函數調用。

<a4j:commandLink ajaxSingle="true" action="# editRequestedQuoteController.viewRequestedQuote}" 
    reRender="mainRequestedQuotePanel,subpanel,btnPanel,messagPanelView" 
    onclick="#{rich:component('viewRequestedQuotePanel')}.show(); changeColorName()"> 
    <span>View</span> 
    <f:param name="orderId" value="#{order.id}"/> 
</a4j:commandLink> 

的changeColorName()函數被調用,並運行下列代碼:

function changeColorName() { 
    jQuery(".managedorder-color-name").each(function(){ 
     var existingColor = jQuery(this).text(); 
     var newColor = existingColor.replace(/\*/g, ''); 
     jQuery(this).text(newColor.trim(newColor)); 
    }); 
} 

代碼newColor.trim(newColor)是剛剛從字符串中除去前/後間隔。

這裏就是字符串所呈現的代碼:

<c:forEach var="orderItem" items="#{editRequestedQuoteBean.orderItems}" varStatus="status" > 
    ... 
    <td rowspan="#{orderItem.logo.logoName != null ? '4' : '2'}"> 
     <h:outputText styleClass="managedorder-color-name" value="#{orderItem.itemColor.swatchcolor}" /> 
    </td> 
    ... 
</c:forEach> 

當我使用Firebug調試它,我可以遍歷代碼,看看它是執行,所以我知道它獲取調用。但是我應該在這裏指出,有時在第一次運行時,代碼似乎並未執行,但如果我再次單擊「veiw」鏈接,則它會執行。當我跨過最後一行時,我可以看到文本被我發送的字符串替換,但如果我「繼續」(F8),字符串會回到我開始使用的版本,即帶有星號的版本。有誰知道爲什麼會發生這種情況?請任何人,讓我知道如果這不清楚,或者如果你需要更多的信息。

謝謝。

回答

2

這些更改已被ajax渲染覆蓋。在之前執行onclickajax請求。但是,當ajax請求完成時,HTML DOM樹會從服務器端的新元素更改。你需要在之後執行changeColorName() JS函數的ajax渲染。您可以使用oncomplete屬性。

<a4j:commandLink ... oncomplete="changeColorName()" /> 
+0

哇,我不敢相信我沒有看到。咄!大聲笑。感謝@BalusC指出我的疏忽。 – jsmoorejr 2012-07-30 19:40:58