2.4.1.21.9 Multiple-Selection List Box Control

The multiple-selection list box control enables the user to select multiple values from a list of options that can be specified manually by the form template designer, or is populated from a data source. The user is also able to enter custom values in the control. The following table describes the symbols for a multiple-selection list box control.

Symbol

Description

MSLB_WITH_STATIC_CHOICES

A multiple-selection list box is a control that allows the user to select multiple values from a list of options. The list of options is stored in the XSL.

MSLB_WITH_STATIC_CHOICES_AND_CUSTOM_ITEMS

Similar to MSLB_WITH_STATIC_CHOICES, but in addition to being able to select options, the user is able to enter custom values.

MSLB_WITH_STATIC_CHOICES_AND_CUSTOM_ITEMS_AND_DATA_FORMAT

Similar to MSLB_WITH_STATIC_CHOICES_AND_CUSTOM_ITEMS, but with data formatting.

MSLB_WITH_DYNAMIC_CHOICES

Similar to MSLB_WITH_STATIC_CHOICES, with the exception that the list of options is populated from another location within the form’s data source (2).

MSLB_WITH_DYNAMIC_CHOICES_AND_CUSTOM_ITEMS

Similar to MSLB_WITH_DYNAMIC_CHOICES, but in addition to being able to select options, the user is able to enter custom values.

MSLB_WITH_DYNAMIC_CHOICES_AND_CUSTOM_ITEMS_DATA_FORMAT

Similar to MSLB_WITH_DYNAMIC_CHOICES_AND_CUSTOM_ITEMS, but with data formatting.

In any production defined in this section, any use of a REPEATING_LEAF_XPATH with the same subscript MUST have an identical yield.

In any production defined in this section, any use of a MSLB_STYLES with the same subscript MUST have an identical yield.

In any production defined in this section, any use of a TAB_INDEX with the same subscript MUST have an identical yield.

For each instance of ANY_STRINGX in MSLB_FOR_EACH_SELECT there MUST be an identical instance of ANY_STRINGX in MSLB_STATIC_OPTIONS.

MSLB_FOR_EACH_SELECT:

 REPEATING_LEAF_XPATH1[(.!="") | ("and" separated list of (.!="ANY_STRINGX")+)]

MSLB_WITH_STATIC_CHOICES:

 <xsl:choose>
     <xsl:when test="function-available('ipApp:GetMajorVersion') and ipApp:GetMajorVersion() &gt;= 12">
         <span style="MSLB_STYLES1" class="xdMultiSelectList" title="ANY_STRING1" (xd:postbackModel="POSTBACKMODEL")? xd:CtrlId="CONTROL_ID" xd:xctname="multiselectlistbox" (xd:boundProp="value")? tabIndex="-1" xd:ref="REPEATING_LEAF_XPATH1" (DISABLED="true")?>
             MSLB_CONDITIONAL_FORMATTING1
             MSLB_CONDITIONAL_DISABLING1
             MSLB_STATIC_OPTIONS
             <xsl:for-each select="MSLB_FOR_EACH_SELECT1">
                 <xsl:if test="normalize-space(.)!=''">
                     <span class="xdMultiSelectListItem">
                         MSLB_CHECKBOX
                         <xsl:value-of select="."/>
                     </span>
                 </xsl:if>
             </xsl:for-each>
         </span>
     </xsl:when>
     <xsl:otherwise>
         <span>
             LIST_MSLB
         </span>
     </xsl:otherwise>
 </xsl:choose>

MSLB_WITH_STATIC_CHOICES_AND_CUSTOM_ITEMS:

 <xsl:choose>
     <xsl:when test="function-available('ipApp:GetMajorVersion') and ipApp:GetMajorVersion() &gt;= 12">
         <span style="MSLB_STYLES1" class="xdMultiSelectList" title="ANY_STRING1" (xd:postbackModel="POSTBACKMODEL")? xd:CtrlId="CONTROL_ID" xd:xctname="multiselectlistbox" (xd:boundProp="value")? tabIndex="-1" xd:ref="REPEATING_LEAF_XPATH1">
             MSLB_CONDITIONAL_FORMATTING
             MSLB_CONDITIONAL_DISABLING1
             MSLB_STATIC_OPTIONS
             <xsl:for-each select="MSLB_FOR_EACH_SELECT1">
                 <span class="xdMultiSelectListItem">
                     MSLB_CHECKBOX
                     <span hideFocus="1" contentEditable="true" xd:binding="." xd:xctname="PlainText" style="WIDTH: 70%;" tabIndex="TAB_INDEX1" (xd:inputScopeId="INPUT_SCOPE_ID") ? (xd:allowNonMatching="yes")? class="xdMultiSelectFillIn">
                         <xsl:attribute name="title">
                             <xsl:value-of select="." />
                         </xsl:attribute>
                         MSLB_CONDITIONAL_DISABLING2
                         <xsl:value-of select="." />
                     </span>
                 </span>
             </xsl:for-each>
             <xsl:if test="not(MSLB_FOR_EACH_SELECT1[1])">
                 <span class="xdMultiSelectListItem">
                     MSLB_CUSTOM_VALUE
                     <span title="" hideFocus="1" xd:xctname="PlainText" xd:binding="REPEATING_LEAF_XPATH1[.=''][1]" style="WIDTH: 70%;"  tabIndex="TAB_INDEX1"  class="xdMultiSelectFillIn">
                     </span>
                 </span>
             </xsl:if>
         </span>
     </xsl:when>
     <xsl:otherwise>
         <span>
             LIST_MSLB
         </span>
     </xsl:otherwise>
 </xsl:choose>

MSLB_WITH_STATIC_CHOICES_AND_CUSTOM_ITEMS_AND_DATA_FORMAT:

 <xsl:choose>
     <xsl:when test="function-available('ipApp:GetMajorVersion') and ipApp:GetMajorVersion() &gt;= 12">
         <span style="MSLB_STYLES1" class="xdMultiSelectList" title="ANY_STRING1" (xd:postbackModel="POSTBACKMODEL")? xd:CtrlId="CONTROL_ID" xd:xctname="multiselectlistbox" tabIndex="-1" xd:ref="REPEATING_LEAF_XPATH1" xd:boundProp="xd:num" xd:datafmt="DATA_FMT_CTRL_MSLB1">
             MSLB_CONDITIONAL_FORMATTING
             MSLB_CONDITIONAL_DISABLING1
             MSLB_STATIC_OPTIONS
             <xsl:for-each select="MSLB_FOR_EACH_SELECT1">
                 <span class="xdMultiSelectListItem">
                     MSLB_CHECKBOX
                     <span hideFocus="1" contentEditable="true" xd:binding="." xd:xctname="PlainText" style="WIDTH: 70%;" tabIndex="TAB_INDEX1" class="xdMultiSelectFillIn xdBehavior_Formatting" (xd:inputScopeId="INPUT_SCOPE_ID")? (xd:allowNonMatching="yes")? xd:boundProp="xd:num" xd:datafmt="DATA_FMT_CTRL_MSLB1">
                         <xsl:attribute name="xd:num">
                             <xsl:value-of select="." />
                         </xsl:attribute>
                         <xsl:attribute name="title">
                             <xsl:value-of select="." />
                         </xsl:attribute>
                         MSLB_CONDITIONAL_DISABLING2
                         MSLB_DATA_FORMATTING1
                     </span>
                 </span>
             </xsl:for-each>
             <xsl:if test="not(MSLB_FOR_EACH_SELECT1[1])">
                 <span class="xdMultiSelectListItem">
                     MSLB_CUSTOM_VALUE
                     <span title="" hideFocus="1" xd:xctname="PlainText" xd:binding="REPEATING_LEAF_XPATH1[.=''][1]" style="WIDTH: 70%;"  tabIndex="TAB_INDEX1"  class="xdMultiSelectFillIn" >
                     </span>
                 </span>
             </xsl:if>
         </span>
     </xsl:when>
     <xsl:otherwise>
         <span>
             LIST_MSLB
         </span>
     </xsl:otherwise>
 </xsl:choose>

MSLB_WITH_DYNAMIC_OPTIONS:

 <xsl:choose>
     <xsl:when test="function-available('ipApp:GetMajorVersion') and ipApp:GetMajorVersion() &gt;= 12">
         <span style="MSLB_STYLES1" class="xdMultiSelectList" title="ANY_STRING1" xd:xctname="multiselectlistbox" xd:CtrlId="CONTROL_ID" xd:boundProp="value" (xd:postbackModel="POSTBACKMODEL")? tabIndex="-1" xd:ref="REPEATING_LEAF_XPATH1">
             MSLB_CONDITIONAL_FORMATTING
             MSLB_CONDITIONAL_DISABLING
             <xsl:variable name="values" select="REPEATING_LEAF_XPATH1" />
             (MSLB_DYNAMIC_OPTIONS_GROUP | MSLB_DYNAMIC_OPTIONS_REPEATING_FIELD)
             <xsl:for-each select="REPEATING_LEAF_XPATH1[not(.=$options)] | ([PREDICATE_XPATH1])?">
                 <xsl:if test="normalize-space(.)!=''">
                     <span class="xdMultiSelectListItem">
                         MSLB_CHECKBOX
                         <xsl:value-of select="." />
                     </span>
                 </xsl:if>
             </xsl:for-each>
         </span>
     </xsl:when>
     <xsl:otherwise>
         <span>
             LIST_MSLB
         </span>
     </xsl:otherwise>
 </xsl:choose>

MSLB_WITH_DYNAMIC_OPTIONS_AND_CUSTOM_OPTIONS:

 <xsl:choose>
     <xsl:when test="function-available('ipApp:GetMajorVersion') and ipApp:GetMajorVersion() &gt;= 12">
         <span style="MSLB_STYLES1" class="xdMultiSelectList" title="ANY_STRING1" xd:xctname="multiselectlistbox" xd:CtrlId="CONTROL_ID" xd:boundProp="value" (xd:postbackModel="POSTBACKMODEL")? tabIndex="-1" xd:ref="REPEATING_LEAF_XPATH1">
             MSLB_CONDITIONAL_FORMATTING
             MSLB_CONDITIONAL_DISABLING1
             <xsl:variable name="values" select="REPEATING_LEAF_XPATH1" />
             (MSLB_DYNAMIC_OPTIONS_GROUP | MSLB_DYNAMIC_OPTIONS_REPEATING_FIELD)
             <xsl:for-each select="REPEATING_LEAF_XPATH1[not(.=$options)] |([PREDICATE_XPATH1])?">
                 <span class="xdMultiSelectListItem">
                     MSLB_CHECKBOX
                     <span hideFocus="1" contentEditable="true" xd:binding="." xd:xctname="PlainText" style="WIDTH: 70%;" tabIndex="TAB_INDEX1" class="xdMultiSelectFillIn" (xd:inputScopeId="INPUT_SCOPE_ID")? (xd:allowNonMatching="yes")?>
                         <xsl:attribute name="title">
                             <xsl:value-of select="." />
                         </xsl:attribute>
                         MSLB_CONDITIONAL_DISABLING1
                         <xsl:value-of select="." />
                     </span>
                 </span>
             </xsl:for-each>
             <xsl:if test="not(REPEATING_LEAF_XPATH1[not(.=$options)])">
                 <span class="xdMultiSelectListItem">
                     MSLB_CUSTOM_VALUE
                      <span title="" hideFocus="1" xd:xctname="PlainText" xd:binding="REPEATING_LEAF_XPATH1[.=''][1]" style="WIDTH: 70%;"  tabIndex="TAB_INDEX1"  class="xdMultiSelectFillIn" >
                     </span>
                 </span>
             </xsl:if>
         </span>
     </xsl:when>
     <xsl:otherwise>
         <span>
             LIST_MSLB
         </span>
     </xsl:otherwise>
 </xsl:choose>

MSLB_WITH_DYNAMIC_OPTIONS_AND_CUSTOM_OPTIONS_AND_DATA_FORMATTING:

 <xsl:choose>
     <xsl:when test="function-available('ipApp:GetMajorVersion') and ipApp:GetMajorVersion() &gt;= 12">
         <span style="MSLB_STYLES1" class="xdMultiSelectList" title="ANY_STRING1" xd:xctname="multiselectlistbox" xd:CtrlId="CONTROL_ID" xd:boundProp="value" (xd:postbackModel="POSTBACKMODEL")? tabIndex="-1" xd:ref="REPEATING_LEAF_XPATH1" xd:datafmt="DATA_FMT_CTRL_MSLB1">
             MSLB_CONDITIONAL_FORMATTING
             MSLB_CONDITIONAL_DISABLING1
             <xsl:variable name="values" select="REPEATING_LEAF_XPATH1" />
             (MSLB_DYNAMIC_OPTIONS_GROUP | MSLB_DYNAMIC_OPTIONS_REPEATING_FIELD)
             <xsl:for-each select="REPEATING_LEAF_XPATH1[not(.=$options)] |([PREDICATE_XPATH1])?">
                 <span class="xdMultiSelectListItem">
                     MSLB_CHECKBOX
                     <span hideFocus="1" contentEditable="true" xd:binding="." xd:xctname="PlainText" style="WIDTH: 70%;" tabIndex="TAB_INDEX1" class="xdMultiSelectFillIn xdBehavior_Formatting" (xd:inputScopeId="INPUT_SCOPE_ID")? (xd:allowNonMatching="yes")? xd:boundProp="xd:num" xd:datafmt="DATA_FMT_CTRL_MSLB1">
                         <xsl:attribute name="xd:num">
                             <xsl:value-of select="." />
                         </xsl:attribute>
                         <xsl:attribute name="title">
                             <xsl:value-of select="." />
                         </xsl:attribute>
                         MSLB_CONDITIONAL_DISABLING2
                         MSLB_DATA_FORMATTING1
                     </span>
                 </span>
             </xsl:for-each>
             <xsl:if test="not(REPEATING_LEAF_XPATH1[not(.=$options)])">
                 <span class="xdMultiSelectListItem">
                     MSLB_CUSTOM_VALUE
                     <span title="" hideFocus="1" xd:xctname="PlainText" xd:binding="REPEATING_LEAF_XPATH1[.=''][1]" style="WIDTH: 70%;"  tabIndex="TAB_INDEX1"  class="xdMultiSelectFillIn" >
                     </span>
                 </span>
             </xsl:if>
         </span>
     </xsl:when>
     <xsl:otherwise>
         <span>
             LIST_MSLB
         </span>
     </xsl:otherwise>
 </xsl:choose>

MSLB_DATA_FORMATTING:

 <xsl:choose>
     <xsl:when test="function-available('xdFormatting:formatString')">
         <xsl:value-of select="xdFormatting:formatString(.,DATA_FMT_CTRL_MSLB1)" />
     </xsl:when>
     <xsl:otherwise>
         <xsl:value-of select="." />
     </xsl:otherwise>
 </xsl:choose>

MSLB_CUSTOM_VALUE:

 <input type="checkbox" title="" xd:onValue="" xd:boundProp="xd:value" xd:binding="REPEATING_LEAF_XPATH1[.=''][1]" xd:xctname="CheckBox" tabIndex="TAB_INDEX1">
     <xsl:attribute name="xd:value">
         <xsl:value-of select="REPEATING_LEAF_XPATH1[.=''][1]" />
     </xsl:attribute>
     <xsl:if test="REPEATING_LEAF_XPATH1=''">
         <xsl:attribute name="CHECKED">CHECKED</xsl:attribute>
     </xsl:if>
 </input>

MSLB_DYNAMIC_OPTIONS_GROUP:

 ((<xsl:variable name="items">
     <xsl:copy-of select="REPEATING_GROUP_XPATH1([PREDICATE_XPATH])?" />
 </xsl:variable>
 <xsl:variable name="uniqueItems" select="msxsl:node-set($items)/*[not(RELATIVE_LEAF_XPATH3 = preceding::REPEATING_GROUP_XPATH1/RELATIVE_LEAF_XPATH3)]" />
 <xsl:for-each select="$uniqueItems">)
 | <xsl:for-each select="REPEATING_GROUP_XPATH1 ([PREDICATE_XPATH1])?"/>)
     <span class="xdMultiSelectListItem">
         <input type="checkbox" xd:boundProp="xd:value" xd:binding="." xd:xctname="CheckBox" tabIndex="TAB_INDEX1">
             <xsl:attribute name="xd:value">
                 <xsl:value-of select="." />
             </xsl:attribute>
             <xsl:attribute name="xd:onValue">
                 <xsl:value-of select="RELATIVE_LEAF_XPATH2" />
             </xsl:attribute>
             <xsl:attribute name="title">
                 <xsl:value-of select="RELATIVE_LEAF_XPATH3" />
             </xsl:attribute>
             <xsl:if test="RELATIVE_LEAF_XPATH2=$values">
                 <xsl:attribute name="CHECKED">CHECKED</xsl:attribute>
             </xsl:if>
         </input>
         <xsl:value-of select="RELATIVE_LEAF_XPATH3" />
     </span>
 </xsl:for-each>
 <xsl:variable name="options" select="REPEATING_GROUP_XPATH1([PREDICATE_XPATH1])?/RELATIVE_LEAF_XPATH2" /

MSLB_DYNAMIC_OPTIONS_REPEATING_FIELD:

 ((<xsl:variable name="items">
     <xsl:copy-of select="REPEATING_LEAF_XPATH2([PREDICATE_XPATH1])?" />
 </xsl:variable>
 <xsl:variable name="uniqueItems" select="msxsl:node-set($items)/*[not(.= preceding::REPEATING_LEAF_XPATH2)]" />
 <xsl:for-each select="$uniqueItems">)
 | <xsl:for-each select="REPEATING_LEAF_XPATH2([PREDICATE_XPATH1])?/>)
     <span class="xdMultiSelectListItem">
         <input type="checkbox" xd:boundProp="xd:value" xd:binding="." xd:xctname="CheckBox" tabIndex=" TAB_INDEX1">
             <xsl:attribute name="xd:value">
                 <xsl:value-of select="." />
             </xsl:attribute>
             <xsl:attribute name="xd:onValue">
                 <xsl:value-of select="." />
             </xsl:attribute>
             <xsl:attribute name="title">
                 <xsl:value-of select="." />
             </xsl:attribute>
             <xsl:if test=".=$values">
                 <xsl:attribute name="CHECKED">CHECKED</xsl:attribute>
             </xsl:if>
         </input>
         <xsl:value-of select="." />
     </span>
 </xsl:for-each>
 <xsl:variable name="options" select="REPEATING_LEAF_XPATH2([PREDICATE_XPATH1])?/." />

MSLB_STATIC_OPTIONS:

 (<span class="xdMultiSelectListItem">
     <input type="checkbox" title="ANY_STRINGX" xd:onValue="ANY_STRINGY" xd:boundProp="xd:value" xd:xctname="CheckBox" tabIndex="TAB_INDEX1">
         <xsl:attribute name="xd:value">
             <xsl:value-of select="REPEATING_LEAF_XPATH1[.=&quot;ANY_STRINGY&quot;][1]"/>
         </xsl:attribute>
         <xsl:attribute name="xd:binding">
             <xsl:value-of select="REPEATING_LEAF_XPATH1[.=&quot;ANY_STRINGY&quot;][1]"/>
         </xsl:attribute>
         <xsl:if test="REPEATING_LEAF_XPATH1=&quot;ANY_STRINGY&quot;">
             <xsl:attribute name="CHECKED">CHECKED</xsl:attribute>
         </xsl:if>
     </input>ANY_STRINGX</span>)*

MSLB_CHECKBOX:

 <input type="checkbox" CHECKED="CHECKED" xd:onValue="{.}" xd:boundProp="xd:value" xd:binding="." xd:xctname="CheckBox" tabIndex="TAB_INDEX1">
     <xsl:attribute name="xd:value">
         <xsl:value-of select="."/>
     </xsl:attribute>
     <xsl:attribute name="title">
         <xsl:value-of select="."/>
     </xsl:attribute>
 </input>

MSLB_CONDITIONAL_FORMATTING:

 (<xsl:attribute name="style">
     MSLB_STYLES1
     <xsl:choose>
         (<xsl:when test="BOOLEAN_XPATH_EXPRESSIONX">MSLB_CONDITIONAL_FORMATTING_STYLES</xsl:when>)*
     </xsl:choose>
 </xsl:attribute>)?

MSLB_CONDITIONAL_DISABLING:

 (<xsl:choose>
     (<xsl:when test="BOOLEAN_XPATH_EXPRESSIONY"/>
     |<xsl:when test="BOOLEAN_XPATH_EXPRESSIONY">
         <xsl:attribute name="disabled">true</xsl:attribute>
     </xsl:when)+
 </xsl:choose>)?

LIST_MSLB:  MUST be an HTML 4.1 fragment, as specified in [HTML], valid under the SPAN element that is also a valid XML 1.0 fragment, as specified in [W3C-XML]. This fragment MUST be ignored.

MSLB_STYLES: Semicolon-delimited list of (STYLE_BORDER?, STYLE_PADDING?, STYLE_BACKGROUND_COLOR?, STYLE_COLOR?, STYLE_MARGIN?, STYLE_FONT_STYLE?, STYLE_WIDTH?, STYLE_HEIGHT?, STYLE_FONT_FAMILY?, STYLE_VERTICAL_ALIGN?, STYLE_FONT_SIZE?, STYLE_FONT_WEIGHT?, STYLE_TEXT_DECORATION?, STYLE_TEXT_ALIGN?)

MSLB_CONDITIONAL_FORMATTING_STYLES: Semicolon-delimited list of (STYLE_DISPLAY_NONE, STYLE_CAPTION) or semicolon-delimited list of (STYLE_BACKGROUND_COLOR?, STYLE_COLOR?, STYLE_FONT_WEIGHT?, STYLE_FONT_STYLE?, STYLE_TEXT_DECORATION?, STYLE_CAPTION)

The following table lists control-specific attributes used by the multiple-selection list box control.

Attribute

Section

xd:allowNonMatching

2.4.2.2

xd:binding

2.4.2.6

xd:boundProp

2.4.2.9

xd:CtrlId

2.4.2.10

xd:datafmt

2.4.2.11

xd:inputScopeId

2.4.2.21

xd:num

2.4.2.26

xd:onValue

2.4.2.28

xd:postbackModel

2.4.2.29

xd:ref

2.4.2.30

xd:value

2.4.2.34

xd:xctname

2.4.2.35