Как включить или отключить поле при изменении значения другого поля?

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


person Akshay    schedule 19.12.2011    source источник


Ответы (1)


Как вы и подозревали, вы можете сделать это с помощью файла xforms:bind. Следующее сделает работу в вашем примере:

<xforms:bind id="radio" nodeset="instance('myModel')/type/radio"
    relevant="empty(../preceding-sibling::type)
              or ../preceding-sibling::type[1]/radio = 'Yes'"/>

Наиболее тонкой частью здесь является использование предшествующей оси для получения элемента type, который идет непосредственно перед текущим.

person avernet    schedule 20.12.2011
comment
Да, он работает именно так, как я хотел.. Большое спасибо.. :) - person Akshay; 21.12.2011