2011-06-23 42 views
1

我目前正在使用一组用于报告的XSL模板。我遇到的问题是我的JavaScript变量没有被更新。我目前在页面顶部包含了JavaScript,但是在其下面定义了Javascript变量。这可能是问题吗?我应该在哪里定义这些变量?是否有一种特殊的方式在XSL模板之间传递它们?到目前为止,我还没有使用任何Javascript,我只使用XSL。但是,我需要执行一些计算,而且还需要更新变量,所以我需要弄清楚如何让变量在模板之间移动。还是有一种方式?XSL:跨XSL模板和文件传递Javascript变量

所以在下面,有些模板被调用时会调用函数,还有一个语句会根据XSL值更新开始和结束日期值。问题是所有正在打印的是初始设定值,而不是更新值。

任何帮助指出我在正确的方向将是伟大的。

在此先感谢!

<xsl:param name="DisplayEmptyFields" select="true()"/> 
<xsl:template match="/"> 
<xsl:include href="./Templates/styles.xslt"/> 
<xsl:include href="./Templates/md_GeneralReportTemplates.xslt"/> 
<xsl:include href="./Templates/md_RunDetailReportTemplate.xslt"/> 

<html> 
    <head> 

      <script type="text/javascript"> 
       var d = ""; 
       var startdate = "6/7/2100 10:56:34 AM"; 
       var enddate = "6/7/2008 10:56:34 AM"; 


       var totruns = 0; 
       var passedruns = 0; 
       var failedruns = 0; 
       var date.flag = 0; 

       function ticks(){ 
        totruns++; 
       } 
       function passticks(){ 
        passedruns++; 
       } 
       function failticks(){ 
        failedruns++; 
       } 

      </script> 
      <xsl:call-template name="DefineStyles"/> 


     </head> 
     <body> 

    <xsl:call-template name="pageheader"/> 

      <xsl:apply-templates select="run"/> 
     </xsl:for-each> 

      <table xsl:use-attribute-sets="report-detail-table-format"> 
      <tr xsl:use-attribute-sets="report-header-row-table-format"> 
       <th colspan="4"> 
        Summary 
       </th> 
      </tr> 
      <tr> 
      <td><b>Total Runs: </b><script type="text/javascript">document.write(totruns);</script></td> 
      <td><b>Passed Runs: </b><script type="text/javascript">document.write(passedruns);</script></td> 
      <td><b>Failed Runs: </b><script type="text/javascript">document.write(failedruns);</script></td> 
      <td><b>Pass Rate: </b><script type="text/javascript">document.write(Math.round((passedruns/totruns*100)*Math.pow(10,2))/Math.pow(10,2));</script>%</td> 

      </tr> 
      <tr> 
      <td colspan="2"><b>Execution Start: </b><script type="text/javascript">document.write(startdate);</script></td> 
      <td colspan="2"><b>Execution End: </b><script type="text/javascript">document.write(enddate);</script></td> 

      </tr> 
      </table> 
       </body> 
       </html> 
+1

'ticks()','passticks()'和'failticks()'改变js vars的值,你是document.write到页面。这些叫什么名字?你能编辑你的答案并粘贴你从这个XSL/XSLT获得的HTML输出吗? – mrk

回答

0

我看到有蹊跷的是var date.flag = 0;

[2011-06-23 18:49:11] JavaScript 
Inline script compilation 
Syntax error at line 9 while loading: 
      var date.flag = 0; 
--------------------^ 
expected ';', got '.' 

这个错误使您的变量定义。尝试评论/修改它,我想它应该没问题。

+0

谢谢Grzegorz,我在这里失去了主意!这似乎已经做到了。我不确定什么时候把它放在那里,它可能是一些复制/粘贴片段的尾随,但似乎已经修复了它。 – Crazkanuk

1

就XSLT样式表而言,您的<script>元素只是数据,它们不是可执行代码。您对处理模型感到困惑:执行XSLT转换以生成HTML页面,然后加载HTML页面;浏览器通常会触发onLoad事件,这会导致页面上的一些Javascript执行。所以你有两件完全分开的事情发生:一个HTML页面正在生成,并且该页面上的Javascript正在执行。