<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:xforms="http://www.w3.org/2002/xforms">
<xhtml:head>
<xhtml:title>Orbeon XForms Sample Form</xhtml:title>
<xforms:model>
<xforms:instance id="myModel" xmlns="">
<form>
<type>
<radio></radio>
</type>
<type>
<radio></radio>
</type>
<type>
<radio></radio>
</type>
</form>
</xforms:instance>
<xforms:bind id="radio" nodeset="instance('myModel')/type/radio"/>
</xforms:model>
</xhtml:head>
<xhtml:body>
<table>
<tr>
</tr>
<tr><td>
<table>
<xforms:repeat nodeset="instance('myModel')/type">
<tr>
<td>
<xforms:output ref="position()"/>
</td>
<td/>
<td>
<xforms:select1 ref="radio" incremental="true" appearance="minimal">
<xforms:item>
<xforms:label>Please Select</xforms:label>
<xforms:value></xforms:value>
</xforms:item><xforms:item>
<xforms:label>Yes</xforms:label>
<xforms:value>Yes</xforms:value>
</xforms:item>
<xforms:item>
<xforms:label>No</xforms:label>
<xforms:value>No</xforms:value>
</xforms:item>
<xforms:alert>Required</xforms:alert>
</xforms:select1>
</td>
</tr>
</xforms:repeat>
</table>
</td>
</tr>
</table>
</xhtml:body>
</xhtml:html>
在上面的表单中,我想根据前一个字段中选择的值启用该字段。例如,如果我在第一个下拉列表中选择是,则只应启用第二个下拉列表。如果我在第二个下拉列表中选择是,则只应启用第三个下拉列表,依此类推。我该如何实现呢?我可以在xforms-value-changed事件中做些什么吗?或者我可以在xforms:bind?
中实现这一点答案 0 :(得分:2)
如您所料,您可以使用xforms:bind
执行此操作。以下将在您的示例中完成此任务:
<xforms:bind id="radio" nodeset="instance('myModel')/type/radio"
relevant="empty(../preceding-sibling::type)
or ../preceding-sibling::type[1]/radio = 'Yes'"/>
这里最微妙的部分是使用preceding axis来获取当前之前的type
元素。