如何启用或禁用另一个字段的值更改字段?

时间:2011-12-19 10:25:21

标签: readonly orbeon xforms

<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?

中实现这一点

1 个答案:

答案 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元素。