1

シナリオ:

<xf:select appearance="full">
    <xf:item>
        <xf:label>Vanilla</xf:label>
        <xf:value>vanilla</xf:value>
    </xf:item>
    <xf:item>
        <xf:label>Strawberry</xf:label>
        <xf:value>strawberry</xf:value>
    </xf:item>
    <xf:item>
        <xf:label>None of the above</xf:label>
        <xf:value>none</xf:value>
    </xf:item>
</xf:select>

「上記のどれでもない」オプションが選択されている場合、他のオプションも選択されていると、コントロールは無効としてマークされます。どうすればこれを達成できますか?

4

2 に答える 2

2

これは、次のようなXPath制約を使用して実行できます。

<xf:bind
    ref="my-value"
    constraint="
        if (tokenize(., '\s+') = 'none') then
            count(tokenize(., '\s+')) = 1
        else
            true()"/>

これが行うことは次のとおりです。

  • 「none」値が選択されている場合は、その値のみがあることを確認してください(count() = 1
  • そうでない場合、コントロールは無効としてマークされます
  • 「none」オプションが選択されていない場合、コントロールは有効です

または、さらに、Alexが上記で指摘しているように、ユーザーが「なし」オプションを選択すると、他のオプションの選択を自動的に解除できます。

<xf:bind
    ref="my-value"
    calculate="if (tokenize(., '\s+') = 'none') 'none' else ."
    readonly="false()"/>

これは何をしますか:

  • 「none」値が選択されている場合は、値が「none」のみに設定されていることを確認してください
  • それ以外の場合は、値をそのままにします
  • また、値が読み取り専用でないことを確認してください(calculateを使用する場合のデフォルトになります)

更新2016-11-25:

元のソリューションは、次のように表すこともできます。

<xf:bind
    ref="my-value"
    constraint=". = 'none' or count(tokenize(., '\s+')) != 1"/>
于 2011-01-03T19:34:42.437 に答える
0

contains() xpath 関数が要件に最適です。コードは以下になります。

<xforms:bind nodeset="instance('myform')/node1"
     constraint="not(contains(.,'none'))" />

ただし、他の人が言ったように、ユーザーが選択しても選択に追加したくない場合は、「なし」を「」に置き換えることができます。

于 2011-09-08T13:10:52.417 に答える