如何在html属性中插入带有javascript内部属性的XSLT元素?

时间:2010-10-29 15:00:06

标签: javascript html xml xslt escaping

问题摘要:我必须做出哪些更改才能使以下xslt文档有效。

以下是我试图为Gizmox WebGUI DataGrid控件修改的主题文档的简化版本。我遇到的问题是按钮元素上可怕的onclick事件属性。我已经通过这种方式尝试了代码,并使用&quot;代替"作为属性引号。在任何情况下,文档都不会验证。我可以在javascript方法中完成一些工作,可能在我完成之前,但我仍然需要在这种情况下将<xsl:value-of select="@Attr.TotalPages"/>的值作为参数传递。

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:WC="wgcontrols">
    <xsl:template name="tplListDrawPaging">
    <table border="0" cellpadding="0" cellspacing="0" class="List-PagingPanel" dir="{$dir}" align="center">
      <tr>
          <td width="150px" align="right" class="Common-FontData" dir="ltr">
              <span>Go to page:</span>
              <input type="text" id="{@Id}-goToPageTextBox" name="{@Id}-goToPageTextBox" style="width:35px;" />
              <button type="button" onclick="var goToValue = getElementById('{@Id}-goToPageTextBox').value;
                                        if(goToValue &lt;= 0){goToValue = 1;}
                                        else if(goToValue &gt; <xsl:value-of select="@Attr.TotalPages"/>){goToValue = <xsl:value-of select="@Attr.TotalPages"/>;})
                                        List_NavigateTo('{@Id}',goToValue);">Go</button>
        </td>
      </tr>
    </table>
  </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:3)

你必须在表达式中escape the curly braces加倍:

<button type="button" onclick="var goToValue = document.getElementById('{@Id}-goToPageTextBox').value; if (goToValue &lt;= 0) {{ goToValue = 1; }} else if (goToValue &gt; {@Attr.TotalPages}) {{ goToValue = {@Attr.TotalPages}; }} List_NavigateTo('{@Id}', goToValue);">Go</button>

我肯定会将该代码置于其自己的函数中,并从onclick处理程序调用它。