Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Saxon JS及其全局Javascript函数名称空间在XSL中调用jQuery UI组件?_Javascript_Jquery Ui_Xslt_Saxon_Saxon Js - Fatal编程技术网

使用Saxon JS及其全局Javascript函数名称空间在XSL中调用jQuery UI组件?

使用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"/&

与这个问题相关,您可以使用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"/>
</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>