2011-01-03 8 views
1

Szenario:Wie kann ich XForms-Kontrollkästchen als ungültig markieren, wenn eine der Optionen "Keine der oben genannten" ausgewählt ist?

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

Wenn die „Keine der oben genannten“ Option ausgewählt ist, wenn eine andere Option als auch gewählt wird, soll die Steuerung als ungültig markiert werden. Wie kann ich das erreichen?

+0

Anstatt das Steuerelement ungültig zu machen, wenn "Keines der obigen" und etwas anderes ausgewählt ist, können Sie automatisch jedes andere Element abwählen, wenn "Keines der obigen" ausgewählt wird, indem Sie ein ' avernet

+0

@Dmitre, nicht sicher, warum Sie das "xpath" -Tag entfernt haben, da die Antwort XPath aufgerufen hat! – ebruchez

Antwort

2

Sie können dies mit einem XPath-Einschränkung, die wie folgt aussieht:

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

Was dies bedeutet ist die folgende:

  • , wenn es eine „none“ Wert ausgewählt ist, dann stellen Sie sicher, es gibt nur diesen Wert (count() = 1)
  • Wenn das nicht der Fall ist, wird die Steuerung als ungültig markiert
  • Wenn keine "keine" Option ausgewählt ist, dann ist die Kontrolle gültig

Alternativ oder zusätzlich als Alex über oben weist darauf hin, können Sie automatisch die anderen Optionen deaktivieren, wenn der Benutzer die Option „Keine“ auswählt:

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

Was das bedeutet ist:

  • , wenn es eine „none“ Wert ausgewählt ist, dann stellen Sie sicher, dass der Wert auf „none“ gesetzt ist nur
  • sonst, halten Sie den Wert wie
  • auch sicherstellen, dass der Wert nicht nur lesbar ist (was die Standardeinstellung sein würde, wenn calculate verwendet wird)

UPDATE 2016.11.25:

Die ursprüngliche Lösung auch wie folgt ausgedrückt werden:

<xf:bind 
    ref="my-value" 
    constraint=". = 'none' or count(tokenize(., '\s+')) != 1"/> 
0

enthält() xpath Funktion ist am besten für Ihre Anforderung. Code wird wie folgt sein.

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

aber wie andere schon gesagt, können Sie die ‚none‘ mit ‚‘ ersetzen, wenn Sie nicht wollen, dass es zu Ihrer Auswahl hinzugefügt werden, auch wenn der Benutzer es auswählt.