使用Saxon JS及其全局Javascript函数名称空间在XSL中调用jQuery UI组件?
与这个问题相关,您可以使用Saxon JS从浏览器中运行的XSL 2.0转换调用Javascript函数。但我似乎无法调用jQuery UI调用。我唯一的想法是,这可能是一个时间问题,jQuery选择器无法找到目标对象的ID,因为Saxon JS尚未将其呈现给DOM 我的简单测试如下 XML使用Saxon JS及其全局Javascript函数名称空间在XSL中调用jQuery UI组件?,javascript,jquery-ui,xslt,saxon,saxon-js,Javascript,Jquery Ui,Xslt,Saxon,Saxon Js,与这个问题相关,您可以使用Saxon JS从浏览器中运行的XSL 2.0转换调用Javascript函数。但我似乎无法调用jQuery UI调用。我唯一的想法是,这可能是一个时间问题,jQuery选择器无法找到目标对象的ID,因为Saxon JS尚未将其呈现给DOM 我的简单测试如下 XML <?xml version="1.0" encoding="UTF-8"?> <data> <date month="7" day="17" year="2017"/&
<?xml version="1.0" encoding="UTF-8"?>
<data>
<date month="7" day="17" year="2017"/>
</data>
包括对initDP(初始化jQuery日期选择器)的HTML调用和对同一日期选择器的XSL调用。HTML起作用,XSL无声地失败。似乎在创建结果元素或至少在文档中插入结果元素之前,您的
XSL:value
Javascript调用被评估
对我来说,有效的方法是在输入
之后简单地添加脚本
结果元素,动态创建Javascript代码:
<xsl:template match="date">
<tr>
<td>Date:</td>
<td>
<xsl:variable name="currentValue" select="string-join((@month, @day, @year), '/')"/>
<xsl:value-of select="$currentValue"/>
<br/>
<input type="text" id="datepicker{position()}"/>
<script xsl:expand-text="yes">initDP('#datepicker{position()}', '{$currentValue}')</script>
</td>
</tr>
</xsl:template>
边缘问题似乎与Saxon JS和JQuery UI交互的问题无关,相反,它似乎是由当前边缘版本的Javascript引擎中的错误引起的,请参阅,Saxon JS代码在检查错误的XML声明时遇到了该错误。如果我删除XML输入和Saxon的SEF包文件中的XML声明,那么它在Edge中可以正常工作,这样Saxon JS代码就不会遇到Edge Javascript错误。我希望Michael Kay在某个地方能够提供帮助。我认为这是一个时间问题,但我没有想到内联脚本调用。谢谢
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>XSLT-JS-UI</title>
<link rel="stylesheet" type="text/css" href="js/jquery-ui.min.css">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui.min.js"></script>
<script type="text/javascript" language="javascript" src="js/SaxonJS.min.js"></script>
<script type="text/javascript" language="javascript" src="js/test.js"></script>
</head>
<body>
<div id="header"></div>
<div id="editor"></div>
<div id="footer"></div>
<input type="text" id="testDP"/>
<br/>
<button onclick="initDP('#testDP','7/17/1961')">picker</button>
</body>
</html>
//=====================================
function initDP(id,init)
{
$(id).datepicker();
$(id).datepicker("setDate",init);
}
//=====================================
$(document).ready(function()
{
SaxonJS.transform({
stylesheetLocation: "test.sef.xml",
sourceLocation: "test.xml"
});
});
//=====================================
<xsl:template match="date">
<tr>
<td>Date:</td>
<td>
<xsl:variable name="currentValue" select="string-join((@month, @day, @year), '/')"/>
<xsl:value-of select="$currentValue"/>
<br/>
<input type="text" id="datepicker{position()}"/>
<script xsl:expand-text="yes">initDP('#datepicker{position()}', '{$currentValue}')</script>
</td>
</tr>
</xsl:template>
<xsl:template match="date">
<tr>
<td>Date:</td>
<td>
<xsl:variable name="currentValue" select="string-join((@month, @day, @year), '/')"/>
<xsl:value-of select="$currentValue"/>
<br/>
<input type="text" id="datepicker{position()}"/>
<ixsl:schedule-action wait="1">
<xsl:call-template name="init-datepicker">
<xsl:with-param name="id" select="'#datepicker' || position()"/>
<xsl:with-param name="value" select="$currentValue"/>
</xsl:call-template>
</ixsl:schedule-action>
</td>
</tr>
</xsl:template>
<xsl:template name="init-datepicker">
<xsl:param name="id" as="xs:string"/>
<xsl:param name="value" as="xs:string"/>
<!--<xsl:sequence select="trace(js:initDP($id, $value), 'init-datepicker called for ' || $id || ' at ' || current-dateTime())"/>-->
<xsl:sequence select="js:initDP($id, $value)"/>
</xsl:template>