我读过similarly entitled article,但它并没有真正提供客户端解决方案。
我有一个单选按钮组,用于确定其他内容是否可见或隐藏。我有代码将在xp:scriptBlock中检索此RBGroup的值。
function getPTValue (bName) {
var pt=null;
for(var i=0; i<document.forms[0].elements.length; i++){
if(document.forms[0].elements[i].name=="#{id:PayType}" ){
if(document.forms[0].elements[i].checked == true){
pt=document.forms[0].elements[i].value;
break; //remove this if for check box groups and collect multiple values above instead
}
}
}
return pt
}
这是单选按钮组;
<xp:radioGroup
id="PayType"
value="#{FInvoiceDoc.PayType}"
defaultValue="Hourly"
style="color:rgb(0,0,0)">
<xp:selectItem itemLabel="Hourly" itemValue="Hourly"> </xp:selectItem>
<xp:selectItem itemLabel="Fixed" itemValue="Fixed"></xp:selectItem>
<xp:eventHandler event="onclick" submit="true" refreshMode="norefresh">
<xp:this.script><![CDATA[payTypeVis();]]></xp:this.script>
</xp:eventHandler>
</xp:radioGroup>
当文档处于编辑模式时,这很有用,但是如果我以只读模式打开它,则会执行上述例程,但不会返回单选按钮组的值。
似乎在读取模式下,它将payType单选按钮组显示为准计算字段。没有按钮,只有价值。我尝试使用XSP.getElementById(“#{id:payType}”)。innerHTML检索它,我得到了值,但周围有很多HTML标签。 (.value什么都不返回)
如何使用严格的CSJS在读取模式下正确检索文档上的单选按钮组值?
答案 0 :(得分:2)
在读取模式下,字段的值不会改变,因此在读取模式下处理它时,使用“脚本块”控件设置CSJS变量并直接从绑定字段中提取。 Script Block控件允许您运行SSJS / Java,因此: var invDocPayType =“#{javascript:FInvoiceDoc.PayType}”;
设置呈现属性,使其仅显示文档是否处于读取模式,因此: if(view.isRenderingPhase())!FInvoiceDoc.isEditable();
然后在CSJS中,检查该变量是否存在(即您处于读取模式),否则直接从单选按钮中获取值。
答案 1 :(得分:0)
我可以想到(可能的)解决方案和解决方法。
(可能的)解决方案是启用&#34; showReadonlyAsDisabled&#34;你的电台组的财产。通过(可能)我的意思是我不能100%确定这是否存在于无线电组。但如果确实如此,你的控制权应该被表现为&#34;控制&#34;使用html标记中的值,使用&#34; readOnly&#34;属性适用于它。在明天早上之前无法对此进行测试。
如果这不起作用,您还可以使用无线电组的onchange事件将您的值复制到隐藏字段,然后读取该辅助字段的值,该值应该更容易检索。
更新
只是尝试了一下:&#34;(可能)&#34;遗憾的是,对于无线电小组来说,解决方案是不可能的,所以忘了它。
你很可能会遇到其他解决方案,正如我的第二个选项中所述,或者@stwissel描述它(他的选项#1)。我的解决方法看起来有点像这样:
我的radioGroup绑定到名为rbGroup
的字段。在名为rbvalue
的同一表单上还有一个简单的数据字段,在Xpage上我有一个绑定到rbvalue
的editBox控件,它通过css display:none
语句隐藏。对于这个editBox,我将showReadonlyAsDisabled
属性设置为true(对于editBoxes,这是有效的):
<xp:inputText
id="rbGrpHelper"
value="#{doc1.rbValue}"
showReadonlyAsDisabled="true">
</xp:inputText>
我的radioGroup的onchange
事件处理程序执行一些简单的代码,将无线电的选定值复制到rbvalue
,并对包含rbGrpHelper
的div执行部分刷新编辑框:
doc1.replaceItemValue("rbValue", doc.getItemValue("rbGroup"))
现在,如果我的xpage在读取模式下打开,由于showReadonlyAsDiabled
属性,我的隐藏辅助字段在其HTML标记中显示如下:
<input type="text"
value="1" id="view:_id1:rbGrpHelper"
name="view:_id1:rbGrpHelper"
readonly="readonly"
style="display:none"
class="xspInputFieldEditBox">
这样rbGrpHelper
始终是最新的,您可以使用CSJS代码访问所选值。
答案 2 :(得分:0)
简短:不要 Long:根据表单的性质,只读模式中没有输入元素,如单选按钮,输入框等。您有一系列选项:
您确实将您的广播组绑定到#{FInvoiceDoc.PayType},因此您可以计算一个隐藏字段(使用像<xp:text value="<:input type=\"hidden\" value=\"#{FInvoiceDoc.PayType}\"" escape="false"></xp:text>
这样的passthrou计算文本。然后只需使用该值客户端
如果你甚至需要在阅读模式下切换,你也需要计算无线电组,因此它是可切换的
使用一组SSJS函数showSection_InterestingName(doc) {....}
计算值true / false以显示处于读取模式的部分(或使用showSection(doc, sectionName)
。这样就可以从显示中抽象出计算结果
希望有所帮助