情景:
<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>
如果选择“以上都不是”选项,如果同时选择了任何其他选项,则控件应标记为无效。我怎样才能做到这一点?
答案 0 :(得分:2)
您可以使用如下所示的XPath约束来执行此操作:
<xf:bind
ref="my-value"
constraint="
if (tokenize(., '\s+') = 'none') then
count(tokenize(., '\s+')) = 1
else
true()"/>
这是做什么的:
count() = 1
)另外,或者另外,正如Alex指出的那样,当用户选择“none”选项时,你可以自动取消选择其他选项:
<xf:bind
ref="my-value"
calculate="if (tokenize(., '\s+') = 'none') 'none' else ."
readonly="false()"/>
这是做什么的:
更新2016-11-25:
原始解决方案也可以表示为:
<xf:bind
ref="my-value"
constraint=". = 'none' or count(tokenize(., '\s+')) != 1"/>
答案 1 :(得分:0)
contains()xpath函数最适合您的要求。代码如下。
<xforms:bind nodeset="instance('myform')/node1"
constraint="not(contains(.,'none'))" />
然而正如其他人所说,如果你不想将它添加到你的选择中,你可以用''替换'none',即使用户选择了它。