0

我试图让一个多选依赖于另一个多选。我已经到了在选择时显示另一个多选的地步Opt1。这就是我想要的。但我也想multiselect2在选择Opt1and时出现Opt2

如果我先选择Opt1然后Opt2,则显示第二个多选。但不是当我选择Opt2然后Opt1。我如何让第二个multiselect出现呢?

<form theme="dark">
    <label>concept</label>
    <fieldset submitButton="true" autoRun="false">
        <input type="multiselect" token="index">
            <label>Index</label>

            <choice value="opt1">Opt1</choice>
            <choice value="opt2">Opt2</choice>

            <change>
                <condition value="opt2">
                    <unset token="opt1_selected"></unset>
                </condition>

                <condition value="opt1">
                    <set token="opt1_selected"></set>
                </condition>
            </change>

            <delimiter> OR </delimiter>
            <default>Opt1</default>
        </input>

        <input type="multiselect" token="Menu2" depends="$opt1_selected$">
            <label>Multi2</label>
        </input>
    </fieldset>
</form>
4

1 回答 1

0

根据经验,我发现当submitButton属性设置为true.

除非提交按钮对您的用例很重要,否则请参阅下面的简单 XML 代码,我将该属性转换为false.

<form theme="dark">
  <label>Sample</label>
  <init>
    <set token="show">true</set>
  </init>
  <fieldset submitButton="false" autoRun="false">
    <input type="multiselect" token="index">
      <label>Index</label>
      <choice value="opt1">Opt1</choice>
      <choice value="opt2">Opt2</choice>
      <change>
        <condition match="match($index$,&quot;opt1&quot;) OR match($index$,&quot;opt2&quot;)">
          <set token="show">true</set>
        </condition>
        <condition match="NOT match($index$,&quot;opt1&quot;) OR match($index$,&quot;opt2&quot;)">
          <unset token="show">true</unset>
        </condition>
      </change>
      <delimiter> OR </delimiter>
      <default>opt1</default>
    </input>
    <input type="multiselect" token="Menu2" depends="$show$">
      <label>Multi2</label>
    </input>
  </fieldset>
</form>

此解决方案应使用以下值组合: opt1opt1 OR opt2opt2opt2 OR opt1

解释:

诀窍在于评估index持有最终选择值的令牌。您可以使用标签match内的属性,<condition>它允许您使用类似 eval 的表达式来验证令牌。

...
<condition match="match($index$,&quot;opt1&quot;) OR match($index$,&quot;opt2&quot;)">
   <set token="show">true</set>
</condition>
...

index此表达式的逻辑是将输入字符串(token 的值)与正则表达式(opt1OR ) “匹配”或比较opt2&quot;请注意,要使此表达式起作用,您必须使用HTML 实体转义一些字符(例如,引号转换为) 。

如果找到匹配项,则满足条件并将继续执行令牌的设置show

...
   <set token="show">true</set>
...

否则,它将继续评估下一个条件(基本上是相同的表达式,但用 NOT 运算符取反),然后继续 unset token show

...
<condition match="NOT match($index$,&quot;opt1&quot;) OR match($index$,&quot;opt2&quot;)">
   <unset token="show">true</unset>
</condition>
...
于 2021-12-22T17:04:39.337 回答