2016-09-26 32 views
1

一直在尝试这一堆不同的方式。下面(不起作用)基本上是我想要做的。使用变量“defineClick”定义“onclick”代码,并动态地将其插入div/onclick处理程序。其他定义的$ block变量在文件中。感谢XSLT,需要将javascript插入onclick处理程序

  <xsl:choose> 
       <xsl:when test="txtBlockTarget='_blank'"> 
        <xsl:variable name="defineClick">window.open('{$block}','_blank');</xsl:variable> 
       </xsl:when> 
       <xsl:otherwise> 
        <xsl:variable name="defineClick">location.href='{$block}';</xsl:variable> 
       </xsl:otherwise> 
      </xsl:choose> 


      <div onclick="{$defineClick}" style="cursor: pointer;"> 

      .....more xsl..... 

      </div> 
+0

什么“不起作用”呢? –

回答

0

xsl:when定义的变量的作用域确定给它的父,并且不会成为它的可用的外部。

尝试扭转你的操作顺序是这样的:

<xsl:variable name="defineClick"> 
    <xsl:choose> 
     <xsl:when test="txtBlockTarget='_blank'">window.open('{$block}','_blank');</xsl:when> 
     <xsl:otherwise>location.href='{$block}';</xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 

<div onclick="{$defineClick}" style="cursor: pointer;"> 
    ....more xsl..... 
</div> 

注意:我不知道,当你写{$block} withing您的变量你想要的东西;就目前而言,它不过是一个没有意义的字符串。但这将是一个单独问题的主题。

+0

它是一个在代码中的其他地方工作的变量,我只是不知道如何在嵌入到JavaScript中时加载它的值。有没有办法“逃避”它? 感谢修复有关颠倒顺序,我现在可以得到“defineClick”变种。 – kevreh

+0

尝试使用''来插入变量的内容。很难更具体地看到整个图片。如果您仍然无法使用它,请发布一个新问题(如果答案为答案,请关闭此问题)。 –

0

谢谢Michael!有时答案比看起来简单得多(以及到达那里的痛苦)。下面的代码工作。

<xsl:variable name="defineClick"> 
    <xsl:choose> 
     <xsl:when test="txtBlockTarget='_blank'">window.open('<xsl:value-of select="$block" />');</xsl:when> 
     <xsl:otherwise>location.href='<xsl:value-of select="$block" />'</xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 

<div onclick="{$defineClick}" style="cursor: pointer;"> 
......