在参考以下两个参考文献后,我在XSL
模板中创建了一个javascript函数。 javascript被调用并且出现警报。但是,虽然它在html中具有价值,但CountID的值在警报中显示为空。
我们需要做些什么更改来提醒CountID?
注意:这是在ASP.Net项目中,我使用的是Visual Studio 2005 注意:这是一个现有的项目,我是XSLT的新手(虽然我对javascript,xml,kendoui,html5等有了解)。
参考
How To Include Client-Side Script Functions in an XSL Document
的Javascript
<SCRIPT LANGUAGE="javascript" DEFER="true">
var myVar = "<xsl:value-of select="CountID"/>";
<xsl:comment>
function on_change()
{
alert(myVar);
}
</xsl:comment>
</SCRIPT>
源XML
<ROOT>
<Counts>
<CountID>34rrgt56</CountID>
<PlantCD>01</PlantCD>
<CountType>PI</CountType>
<StatusCD>OP</StatusCD>
<EntryCompleteIND>N</EntryCompleteIND>
<StartedBy>Lijo C</StartedBy>
<CreatedOnDate>05/09/2014 00:19:04</CreatedOnDate>
</Counts>
</ROOT>
注意:此XML将传递给自定义控件,在该控件中可以执行更多添加操作。但是对于这个问题,这个xml应该足够了。
完成XSL样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<SCRIPT LANGUAGE="javascript" DEFER="true">
var myVar = "<xsl:value-of select="CountID"/>";
<xsl:comment>
function on_change()
{
alert(myVar);
}
</xsl:comment>
</SCRIPT>
<div>
<TABLE border="0" cellPadding="0" cellSpacing="0" BGCOLOR="#E5DBE2" width="100%">
<TR>
<TD CLASS="Heading3" ALIGN="LEFT" WIDTH="25%">
<xsl:value-of select="/ROOT/Labels/PhysicalInventoryIDText/." />
</TD>
<TD CLASS="Heading3" ALIGN="LEFT" WIDTH="20%">
<xsl:value-of select="/ROOT/Labels/DateTimeText/." />
<BR/>
<xsl:value-of select="ROOT/Labels/StartedText/." />
</TD>
<TD CLASS="Heading3" ALIGN="LEFT" WIDTH="15%"></TD>
</TR>
</TABLE>
<TABLE style="display:none" name="emailTable" id="emailTable" width="100%" BGCOLOR="#E5DBE2">
<TR>
<TD width="25%" CLASS="Normal" colspan="1" ALIGN="RIGHT">
<B>
<xsl:value-of select="/ROOT/Labels/EmailAddressText/." />
</B>
</TD>
<TD width="75%" ALIGN="LEFT">
<img src="../Images/ArrowInvisible.gif" width="15" height="13" name="imgEmail1" />
<INPUT id="txtEmail1" name="txtEmail1" runat="server" width="100px" maxlength="100" Required="true" onfocus="document.forms[0].imgEmail1.src='../Images/ArrowVisibleDB.gif';" onblur="document.forms[0].imgEmail1.src='../Images/ArrowInvisible.gif';" />
</TD>
</TR>
<TR>
<TD width="25%" CLASS="Normal" colspan="1" ALIGN="RIGHT">
<B>
<xsl:value-of select="/ROOT/Labels/EmailAddressText/." />
</B>
</TD>
<TD width="75%" ALIGN="LEFT">
<img src="../Images/ArrowInvisible.gif" width="15" height="13" name="imgEmail2" />
<INPUT id="txtEmail2" name="txtEmail2" runat="server" width="100px" maxlength="100" Required="true" onfocus="document.forms[0].imgEmail2.src='../Images/ArrowVisibleDB.gif';" onblur="document.forms[0].imgEmail2.src='../Images/ArrowInvisible.gif';" />
</TD>
</TR>
</TABLE>
<TABLE border="0" cellPadding="0" cellSpacing="0" BGCOLOR="#E5DBE2" width="100%">
<xsl:for-each select="ROOT/Counts">
<TR>
<TD CLASS="Normal" ALIGN="LEFT" width="25%">
<xsl:value-of select="CountID"/>
</TD>
<TD CLASS="Normal" ALIGN="LEFT" width="20%" style="font-size:12">
<xsl:value-of select="CreatedOnDate"/>
</TD>
<TD ALIGN="RIGHT" width="15%">
<Input type="button">
<xsl:attribute name="id">
<xsl:value-of select="CountID"/>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="CountID"/>
</xsl:attribute>
<xsl:attribute name="onclick">
<xsl:text>on_change()</xsl:text>
</xsl:attribute>
<xsl:attribute name="value">Conclude</xsl:attribute>
</Input>
</TD>
</TR>
<xsl:if test="LastError!=''">
<TR>
<TD COLSPAN="3" CLASS="Normal" ALIGN="LEFT" width="100%">
Last Error: <xsl:value-of select="LastError"/>
</TD>
</TR>
</xsl:if>
<TR style="display:none">
<xsl:attribute name="id">
row<xsl:value-of select="CountID" />
</xsl:attribute>
<TD class="NormalError" colspan="4">
<xsl:value-of select="/ROOT/Labels/PIConcludeWarning/." />
<Input type="button" >
<xsl:attribute name="value">
<xsl:value-of select="/ROOT/Labels/YesText/." />
</xsl:attribute>
<xsl:attribute name="onclick">
submitForm(this,this.form,'<xsl:value-of select="CountID"/>')
</xsl:attribute>
</Input>
<xsl:text disable-output-escaping="yes"> </xsl:text>
<Input type="button" >
<xsl:attribute name="value">
<xsl:value-of select="/ROOT/Labels/CancelText/." />
</xsl:attribute>
<xsl:attribute name="onclick">
window.row<xsl:value-of select="CountID" />.style['display'] = 'none';window.emailTable.style['display'] = 'none';
</xsl:attribute>
</Input>
</TD>
</TR>
<TR HEIGHT="1">
<TD BGCOLOR="#FFFFFF" COLSPAN="6" height="1">
<NOBR/>
</TD>
</TR>
</xsl:for-each>
</TABLE>
</div>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
在我看来,XSLT编码方面的正确方法是编写基于XSLT代码的模板,但是当你有一个模板时,所有这一切都从替换
开始。 <Input type="button">
<xsl:attribute name="id">
<xsl:value-of select="CountID"/>
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="CountID"/>
</xsl:attribute>
<xsl:attribute name="onclick">
<xsl:text>on_change()</xsl:text>
</xsl:attribute>
<xsl:attribute name="value">Conclude</xsl:attribute>
</Input>
与
<input type="button" id="{CountID}" name="{CountID}" onclick="on_change(this.id);" value="Conclude"/>
然后使Javascript函数采用参数而不是
var myVar = "<xsl:value-of select="CountID"/>";
<xsl:comment>
function on_change()
{
alert(myVar);
}
</xsl:comment>
只需使用
<script type="text/javascript">
function on_change(id) {
alert(id);
}
</script>
这就是所需要的一切。