我正在创建一个包含下拉列表和按钮的网页。此页面的作用基本上是将原始下拉列表的值更新为新选择的值。
所以我宣布了一个这样的模板:
<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中的下拉进行了大量的研究,其中大多数都是针对每个人使用的,所以它确实无济于事。我也是这种语言的初学者,我只是分析代码并稍微调整一下这个增强,我还不熟悉这些语法。
我的问题是,“如何使用现有代码进行操作?”如果你还附上一个链接/解释一下,我会非常感激,所以我可以了解更多。非常感谢你。
答案 0 :(得分:1)
如果您使用浏览器内置的XSLT 1.0引擎,那么它所能做的只是生成一个HTML页面,可能包含Javascript。一旦生成HTML页面(因此,在用户单击按钮时),XSLT已完成其工作并且不再执行:处理用户输入事件的唯一方法是在HTML页面的Javascript中。
如果使用Saxon-JS,则会发生变化,它允许您在XSLT样式表中编写响应用户输入事件并修改HTML页面的代码。你可以在http://www.saxonica.com/saxon-js/index.xml
上阅读有关Saxon-JS的内容