首页 > 解决方案 > CSJS 不更新计算字段

问题描述

我很少使用 CSJS,但在这种情况下,我试图让它更新计算字段。虽然该字段的值已更新,以便我可以通过警报访问它,但我无法让它显示在 XPage 上。我尝试使用选中只读的可编辑字段,但数据也没有出现在 XPage 上。

我正在调用一个 CSJS 脚本块,我知道您需要刷新才能显示更改,但我已经在该字段周围放置了一个面板并尝试使用它和一个 div。既不产生错误消息,也不显示值。

我正在使用 XSP.partialRefreshGet("#{id:remaining}"); 在我设置值之后。我已经用 .partialRefreshPost 尝试过,它什么也没做,但后来我在 Stephan Wissel 的帖子“遇见 XSP 对象”中读到“......对于 POST,refreshId 必须指向一个表单......”而这个XPage 未附加到表单。我也尝试过使用参数 immediate:true。

我已经阅读了 Teresa Monahan 的文章“XPages 中的客户端 JavaScript 库”、Serdar Basegmez 的“您和每个 XPages 开发人员犯的 10 个错误”、我可以在网络上找到的任何内容,以及“掌握 XPages”一书。我知道这不应该那么困难,所以我相信我只是错过了一些东西(可能是愚蠢的)。

根据上述内容,XPage 和特定字段都没有绑定到任何表单。它位于选项卡式表格的第一个选项卡上,仅显示计算值。该值不需要保存在任何地方。

我通过在 dijit/form/ComboBox 选择中使用 onChange="Testing()" 在我的代理中调用该函数,因为我想要小框,并且在选择之后我不需要字段值。

这是脚本块中的简单文本:

function Testing(){
  XSP.getElementById("#{id:remainingPts}").value = "100";
  var rewards = XSP.getElementById("#{id:numOfRewards1}").value;
  alert("rewards:  " + rewards);
  XSP.partialRefreshGet("#{id:remaining}");
}

这是该字段的样子:

<xp:panel id="remaining">
   <xp:text escape="true" id="remainingPts" value="0">
   </xp:text>
</xp:panel>

我做错了什么?

标签: javascriptxpages

解决方案


我认为xp:text呈现为<span>标签,在这种情况下您需要设置.innerHtml()而不是.value(). 请参阅如何在 JavaScript 中更改 span 元素的文本。您无需刷新即可查看更改。


推荐阅读