Элемент select
плохо соответствует вашим требованиям, поскольку он имеет привязку только к одному узлу. Вместо того чтобы пытаться нарушить семантику элемента управления таким образом, я бы использовал repeat
из trigger
элементов с действиями insert
и delete
, стилизованными с помощью CSS таким образом, чтобы обеспечить вид контроль выбора.
В вашем вопросе не упоминается формат данных, но предполагается, что данные экземпляра выглядят следующим образом:
<xf:instance id="options">
<options xmlns="">
<option selected="false">
<first />
</option>
<option selected="false">
<second />
</option>
<option selected="false">
<third />
</option>
<option selected="false">
<fourth />
</option>
<option selected="false">
<fifth />
</option>
</options>
</xf:instance>
<xf:instance id="results">
<results xmlns="" />
</xf:instance>
Тогда вы сможете получить желаемое поведение с чем-то вроде этого (не проверено):
<xf:repeat id="repeat" nodeset="instance('options')/option">
<xf:trigger appearance="minimal">
<xf:label>
<xf:output value="name(*)" />
</xf:label>
<xf:action ev:event="DOMActivate" if="@selected = 'false'">
<xf:setvalue ref="@selected" value="'true'" />
<xf:insert
origin="instance('options')/option[index('repeat')]/*"
context="instance('results')"
nodeset="*"
at="count(../*)"
position="after"
/>
</xf:action>
<xf:action ev:event="DOMActivate" if="@selected = 'true'">
<xf:setvalue ref="@selected" value="'false'" />
<xf:delete nodeset="instance('results')/*[name(.) = name(current()/*)]" />
</xf:action>
</xf:trigger>
</xf:repeat>