2012-07-30 23 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