2011-03-20 2 views
1

오류가있을 때 양식에 제출 된 smae 값을 유지하고 싶습니다. 옵션 "3"에 대해 만든 예제를 볼 수 있습니다. 모든 선택 필드에서 모든 옵션에 대해 동일한 코드 조각을 작성하고 싶지 않습니다. 더 좋은 방법이 있어야합니다. 생각? 고마워요!선택 필드의 스티커 폼

웬델 Piez 방법으로
<select id="card-expires-month" name="fields[card-expires-month]"> 
    <option value="1" selected="selected">1 - January</option> 
    <option value="2">2 - February</option> 

    <xsl:element name="option"> 

     <xsl:attribute name="value">3</xsl:attribute> 

     <xsl:if test="//data/events/deposit/post-values/card-expires-month = 3"> 
      <xsl:attribute name="selected">selected</xsl:attribute> 
     </xsl:if>  

     <xsl:text>3 - March</xsl:text> 

    </xsl:element> 

    <option value="4">4 - April</option> 
    <option value="5">5 - May</option> 
    <option value="6">6 - June</option> 
    <option value="7">7 - July</option> 
    <option value="8">8 - August</option> 
    <option value="9">9 - September</option> 
    <option value="10">10 - October</option> 
    <option value="11">11 - November</option> 
    <option value="12">12 - December</option> 
</select> 
+1

당신이, 당신이 사용하는 솔루션을 설명하는 질문에 대한 업데이트로 추가 할 경우, 다른 사람의 대답이 아닙니다. – cHao

+0

알다시피, 나는 그것이 잘못된 방법일지도 모른다고 생각했지만 수정 될 것이라고 생각했다. thnx cHao –

답변

3

:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
     <xsl:variable name="vMonths"> 
      <xsl:text>1 - January|2 - February|3 - March|</xsl:text> 
      <xsl:text>4 - April|5 - May|6 - June|</xsl:text> 
      <xsl:text>7 - July|8 - August|9 - September|</xsl:text> 
      <xsl:text>10 - October|11 - November|12 - December|</xsl:text> 
     </xsl:variable> 
     <select id="card-expires-month" name="fields[card-expires-month]"> 
      <xsl:for-each select="(//node())[12 >= position()]"> 
       <option value="{position()}"> 
        <xsl:if test="//data 
            /events 
             /deposit 
             /post-values 
              /card-expires-month 
            = position()"> 
         <xsl:attribute name="selected">selected</xsl:attribute> 
        </xsl:if> 
        <xsl:value-of select="concat(
             position(), 
             substring-before(
              substring-after(
               $vMonths, 
               position() 
              ), 
              '|' 
             ) 
            )"/> 
       </option> 
      </xsl:for-each> 
     </select> 
    </xsl:template> 
</xsl:stylesheet> 

: $vMonths 선언 그냥 일반 재귀으로 가독성

에 생각 :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
     <select id="card-expires-month" name="fields[card-expires-month]"> 
      <xsl:call-template name="tokenize"/> 
     </select> 
    </xsl:template> 
    <xsl:template name="tokenize"> 
     <xsl:param name="pString"> 
      <xsl:text>January|February|March|April|</xsl:text> 
      <xsl:text>May|June|July|August|</xsl:text> 
      <xsl:text>September|October|November|December</xsl:text> 
     </xsl:param> 
     <xsl:param name="pPosition" select="1"/> 
     <xsl:choose> 
      <xsl:when test="$pString=''"/> 
      <xsl:when test="contains($pString,'|')"> 
       <xsl:call-template name="tokenize"> 
        <xsl:with-param name="pString" 
            select="substring-before($pString,'|')"/> 
        <xsl:with-param name="pPosition" select="$pPosition"/> 
       </xsl:call-template> 
       <xsl:call-template name="tokenize"> 
        <xsl:with-param name="pString" 
            select="substring-after($pString,'|')"/> 
        <xsl:with-param name="pPosition" select="$pPosition + 1"/> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise> 
       <option value="{$pPosition}"> 
        <xsl:if test="//data 
            /events 
             /deposit 
             /post-values 
              /card-expires-month 
            = $pPosition"> 
         <xsl:attribute name="selected">selected</xsl:attribute> 
        </xsl:if> 
        <xsl:value-of select="concat($pPosition,' - ',$pString)"/> 
       </option> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 
</xsl:stylesheet> 

모두 출력 :

<select id="card-expires-month" name="fields[card-expires-month]"> 
    <option value="1">1 - January</option> 
    <option value="2">2 - February</option> 
    <option value="3">3 - March</option> 
    <option value="4">4 - April</option> 
    <option value="5">5 - May</option> 
    <option value="6">6 - June</option> 
    <option value="7">7 - July</option> 
    <option value="8">8 - August</option> 
    <option value="9">9 - September</option> 
    <option value="10">10 - October</option> 
    <option value="11">11 - November</option> 
    <option value="12">12 - December</option> 
</select> 

편집 : 플랙의 코멘트 @에 관해서는, 인라인 또는 외부 소스와 CLASIC 답 :

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:m="month" 
exclude-result-prefixes="m"> 
    <xsl:output method="html"/> 
    <m:m>January</m:m> 
    <m:m>February</m:m> 
    <m:m>March</m:m> 
    <m:m>April</m:m> 
    <m:m>May</m:m> 
    <m:m>June</m:m> 
    <m:m>July</m:m> 
    <m:m>August</m:m> 
    <m:m>September</m:m> 
    <m:m>October</m:m> 
    <m:m>November</m:m> 
    <m:m>December</m:m> 
    <xsl:template match="/"> 
     <xsl:variable name="vSelected" 
     select="//data/events/deposit/post-values/card-expires-month"/> 
     <select id="card-expires-month" name="fields[card-expires-month]"> 
      <xsl:for-each select="document('')/*/m:m"> 
       <option value="{position()}"> 
        <xsl:if test="$vSelected = position()"> 
         <xsl:attribute name="selected">selected</xsl:attribute> 
        </xsl:if> 
        <xsl:value-of select="concat(position(),' - ',.)"/> 
       </option> 
      </xsl:for-each> 
     </select> 
    </xsl:template> 
</xsl:stylesheet> 
+0

고마워! 나는 그것을 일반적인 용도로 추상화했다. 이것은 굉장합니다! –

+0

@Kirk Strobeck. 천만에요. –

+0

+1 좋은 답변입니다. 몇 달 동안 나는 토큰 화 가능한 문자열이 아니라 자체 네임 스페이스에 노드 집합을 유지할 것이다. – Flack

관련 문제