2017-03-28 41 views
0

我正在創建一個具有下拉列表和按鈕的網頁。這個頁面的功能基本上是將原來的下拉菜單的值更新爲新的選定的值。如何從XSLT中的評估列表中獲取值

所以我宣佈這樣的一個模板:

<xsl:template name="CustType"> 
    <xsl:param name="custTypeLbl" select="$lang.custTypeLbl"/> 
    <xsl:param name="valueList"/> 
    <xsl:param name="disable" select="'false'"/> 
    <xsl:param name="controlName" select="'customertype'"/> 
    <xsl:param name="onChange" select="''"/> 

     <xsl:call-template name="SelectBox"> 
       <xsl:with-param name="selectBoxLabel" select="$custTypeLbl"/> 
       <xsl:with-param name="controlName" select="$controlName"/> 
       <xsl:with-param name="disable" select="$disable"/> 
       <xsl:with-param name="valueList" select="$valueList"/> 
       <xsl:with-param name="onChange" select="$onChange"/> 
       <xsl:with-param name="valueColspan" select="''"/> 
     </xsl:call-template> 
</xsl:template> 

這裏是我的下拉的內容:

<xsl:template name="CustomerTypeList"> 
<xsl:param name="selectedCustType"/> 

    <xsl:call-template name="OptionElement"> 
     <xsl:with-param name="optionValue" select="'M'"/> 
     <xsl:with-param name="optionDescription" select="$lang.opt.customerType.member"/> 
     <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/> 
    </xsl:call-template> 

    <xsl:call-template name="OptionElement"> 
     <xsl:with-param name="optionValue" select="'E'"/> 
     <xsl:with-param name="optionDescription" select="$lang.opt.customerType.employee"/> 
     <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/> 
    </xsl:call-template> 

    <xsl:call-template name="OptionElement"> 
     <xsl:with-param name="optionValue" select="'N'"/> 
     <xsl:with-param name="optionDescription" select="$lang.opt.customerType.nonmember"/> 
     <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/> 
    </xsl:call-template>   

    <xsl:call-template name="OptionElement"> 
     <xsl:with-param name="optionValue" select="'R'"/> 
     <xsl:with-param name="optionDescription" select="$lang.opt.customerType.returncenter"/> 
     <xsl:with-param name="selectedOptionValue" select="$selectedCustType"/> 
    </xsl:call-template>    


</xsl:template> 

然後我打電話/在我的網頁是這樣顯示的下拉列表:

   <xsl:call-template name="CustType"> 
        <xsl:with-param name="customerType" select="$CUSTOMERTYPE"/> 
        <xsl:with-param name="valueList"> 
         <xsl:call-template name="CustomerTypeList"> 
          <xsl:with-param name="selectedCustType" select="$CUSTOMERTYPE"/> 
         </xsl:call-template> 
        </xsl:with-param> 
       </xsl:call-template> 

然後當我按一下按鈕,它會通過這些參數:

<form name="{$customerDetailsForm}" action="{$formAction}" method="post" onSubmit="{$formOnSubmit}"> 
     <INPUT TYPE="Hidden" NAME="groupid" VALUE="{$groupId}"/> 
     <INPUT TYPE="Hidden" NAME="selectedCustType" VALUE="{$CUSTOMERTYPE}"/> 
     <INPUT TYPE="Hidden" NAME="namechangecode" VALUE=""/> 
     <INPUT TYPE="Hidden" NAME="statusinfots" value="{$customerInfoNode/Status/@TimeStamp}"></INPUT> 
     <input type="Hidden" name="loyaltyIDPanelFlag" value="HIDDEN"/> 
     <input type="hidden" name="AccessScreen" value="{$AccessScreen}"/> 
     <xsl:call-template name="DataLayout"/> 
    </form> 

我的問題是我沒有得到customerType的選定值(例如:「M」爲會員,「N」爲非會員,「E」爲員工)。它得到的結果與舊值相同。 (我的「沒有數據改變」的錯誤處理程序被觸發)

我已經對XSLT中的下拉菜單進行了大量研究,其中大多數都使用for-each,所以它確實沒有幫助。我也是這種語言的初學者,我只是分析代碼並對此進行了一些調整,但我還不熟悉這些語法。

我的問題是,「如何使用我現有的代碼?」如果你也附加鏈接/解釋一下,我會非常感激,所以我可以更多地瞭解它。非常感謝。

回答

1

如果您使用內置於瀏覽器的XSLT 1.0引擎,那麼它所能做的就是生成一個可能包含Javascript的HTML頁面。一旦生成了HTML頁面(並且因此在用戶單擊按鈕時),XSLT已經完成其工作並且不再執行:處理用戶輸入事件的唯一方式是在HTML頁面的Javascript中。

如果您使用Saxon-JS,則允許您在XSLT樣式表中編寫代碼,以響應用戶輸入事件並修改HTML頁面。你可以閱讀關於撒克遜JS在http://www.saxonica.com/saxon-js/index.xml

+0

Javascript是答案。謝謝:)雖然我沒有嘗試Saxon-JS(我真的不知道這是因爲系統已經存在,我只是添加了一個功能),我在下拉列表中添加了一個onChange事件。 – Cyberpau