如何在xslt中引用js
1.我有一个js文件,如何在js中引用里面的函数?
2.如果在xsl里面写一个函数?如打开子窗体的函数:
window.open("Form.aspx?taskid="+taskid,"_blank","height=700,width=800,resizable=yes,scrollbars=auto");
3.下面的代码
<msxsl:script language="javascript" implements-prefix="user">
<![CDATA[
function OpenWin(){
document.write("123123");
}
]]>
</msxsl:script>
运行的时候提示:未声明变量“document” ---> System.Xml.Xsl.XslLoadException: 未声明变量“document
[最优解释]
首先,你要分清楚你JS代码操作的对象是HTML DOM,还是XSLT里的DOM。
XSLT仅仅帮你完成将XML转换为HTML的工作,期间的JS代码也是用来完成这个工作的一种手段。
换句话说,两种JS的执行时间点是不一样的。XSLT JS是运行在XSLT过程中,也就是XML=>HTML;HTML JS则是运行在HTML加载,或者与用户交互的过程中。搞清楚这些,你就明白XSLT中的JS该怎么用了。
在回答你的3个问题前,我假设你懂HTML中的JS。
1,如果你是指在XSLT里引用第二句所说的“XSLT仅仅帮你完成将XML转换为HTML的工作,期间的JS代码也是用来完成这个工作的一种手段。”,XSLT中的JS,并没有document对象。HTML DOM里面的对象,在XSLT中都不存在。如果是想在HTML加载时运行的JS,则不需要用XSLT脚本语法来写。
[其他解释]
首先,你要明白XSLT是XML格式转换的语言,可以把一个XML转换成其他格式。
在这里,需要把XML文件转换成HTML,而JS、CSS等都是HTML的内容。JS的写法只需要满足HTML、JS的规范即可。
如下所示:
<xsl:output method="html"/>
<xsl:template match="root">
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.2.min.js"/>
</head>
<body>
<xsl:for-each select="people">
<div class="p_name">
<xsl:value-of select="."/>
</div>
</xsl:for-each>
</body>
<script type = "text/javascript">
alert(1);
jQuery(".p_name").css("border", "1px solid red");
</script>
</html>
</xsl:template>
[其他解释]
我也遇到该问题,xslt文件如下,其中引入了一个Base.js,里面定义了一个C变量,在下面的msxsl:script调用却不行,说未声明变量“C”:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:user="Qin">
<xsl:output method="html" indent="yes"/>
<xsl:template name="AA" match="Nav">
<script type="text/javascript" src="http://localhost:60080/Scripts/Base.js"></script>
<xsl:for-each select="div/*">
<xsl:copy-of select="."/>
<xsl:if test="user:Isw()">
<i name="Ctr">
<a href="####">编辑</a>
<a href="####">删除</a>
<a href="####">添加</a>
</i>
</xsl:if>
</xsl:for-each>
</xsl:template>
<msxsl:script language="javascript" implements-prefix="user" >
function Isw()
{
var rUrl = "http://localhost:60080/Service.asmx/Existed?Nm=test";
C.EXHR(cNmH, "GET", rUrl);
function cNmH(Rsp)
{
return Rsp.documentElement.firstChild.nodeValue.toLowerCase() == "true" ? true : false;
}
}
</msxsl:script>
</xsl:stylesheet>
[其他解释]
哪位知道怎么实现吗?