所以这是我的问题。我试图获取来自后端的值并删除值中不需要的文本。所以基本上我得到一个颜色,颜色名称的末尾有一个或两个星号。我将该值发送到JavaScript函数并删除字符串中可能存在的任何星号。到目前为止,这对我来说一直很好。我发现另一个位置发生了这种情况,当我尝试做同样的事情时,它不起作用。字符串带有星号,我将它们删除并用新字符串替换html,并且片刻工作,然后原始字符串返回。
所以,这里有更多细节。在我正在处理的应用程序中,有一个链接,当单击时打开一个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),字符串将返回到我开始的版本,带有星号的版本。有谁知道为什么会发生这种情况?如果不清楚或者您需要更多信息,请告诉我。
感谢。
答案 0 :(得分:2)
ajax渲染已覆盖了这些更改。 1}}在 ajax请求之前执行。但是当ajax请求完成时,HTML DOM树将使用服务器端的新元素进行更改。在 ajax渲染之后,您需要执行onclick
JS函数。您可以使用changeColorName()
属性。
oncomplete