我试图在XSLT文件中调用一个外部javaScript函数,当我单击图像元素时将调用该函数。
XSLT文件如下所示:
from crequest.middleware import CrequestMiddleware
class UserNodeManager(models.Manager):
def all(self):
qs = super(UserNodeManager, self).all()
request = CrequestMiddleware.get_request()
return qs.filter(...)
我的外部函数的名称是 OpenPopupDetailsTexte 。
HTML中的结果是:
<xsl:template match="link|para//link">
<xsl:element name="a">
<xsl:attribute name="href">
<!--OpenPopupDetailsTexte('<xsl:value-of select="@href"/>', 1);-->
<!--alert();-->
</xsl:attribute>
<xsl:attribute name="title">
<xsl:choose>
<xsl:when test="text() = 'n'">Note circulaire</xsl:when>
<xsl:when test="text() = 'm'">Modification</xsl:when>
<xsl:when test="text() = 'd'">Décret d application</xsl:when>
<xsl:when test="text() = 'ma'">Abrogation</xsl:when>
<xsl:when test="text() = 't'">Renvoi au texte</xsl:when>
<xsl:when test="text() = 'a'">Arrêté ministériel</xsl:when>
<xsl:when test="text() = 'mc'">Texte complétant cette disposition</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="src">/assets/projets/images/<xsl:value-of select=". "/>.gif</xsl:attribute>
<xsl:attribute name="border">0</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>
答案 0 :(得分:2)
请注意,您没有在XSLT中调用外部javascript函数。您只是在输出文本,当在浏览器中处理结果输出时,这些文本恰好会被解析为Javascript。
无论如何,您需要将相关的javascript文本包装在xsl:text
中,以防止包含换行符。 (如果同一节点中有非空格字符,则不会在XSLT中剥离空格)
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:text>javascript:OpenPopupDetailsTexte('<xsl:text>
<xsl:value-of select="@href"/>
<xsl:text>', 1);</xsl:text>
</xsl:attribute>
或者,更好的是,使用Attribute Value Templates ...
<a href="javascript:OpenPopupDetailsTexte('{@href}', 1);">
因此,花括号中的表达式表示要求值的表达式,而不是按字面意思输出。 (还请注意,当名称将为静态时,无需使用xsl:element
创建元素。)