2016-09-26 58 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;"> 
......