2016-11-29 30 views
0

对于XSLT和使用Saxon CE处理器我很陌生。我正在编写一个转换,其中提交按钮的onclick事件将复选框的“checked”状态写入文本字段。只要文本没有被手动编辑,它就可以正常工作。一旦文本被手动编辑,任何后续的onclick事件都无法将复选框状态写入文本字段。Saxon-CE_1.1 set-attribute在手动更改值后不会更新输入元素的属性

我不知道我在做什么错。以下是xsl文件的代码片段。真的很感谢任何帮助或建议,以解决这个谜题,我花了一天的时间思考。

<xsl:template match="/"> 
    <input type="checkbox" name="chk1" value="chk1"/> 
    <input type="submit" value="Show Selection" name="btnShowText"/> 
    <input name="txtResult"/> 
</xsl:template> 

<xsl:template match="//input[@name='btnShowText']" mode="ixsl:onclick"> 
    <xsl:apply-templates select="//input[@name='txtResult']"/> 
</xsl:template> 

<xsl:template match="//input[@name='txtResult']"> 
    <ixsl:set-attribute name="value" select="//input[@name='chk1']/@prop:checked"/> 
</xsl:template> 
+0

我的确希望人们不会为了解释问题而不说话。我看不到任何值得赞扬的东西。 –

回答

0

用JavaScript以及与撒克逊人来操纵你需要设置的控制,而不是属性的一种财产形式的控制,所以使用ixsl:set‑property

<xsl:template match="//input[@name='txtResult']"> 
    <ixsl:set-property object="." name="value" select="//input[@name='chk1']/@prop:checked"/> 
</xsl:template> 
+0

对不起,迟到的答复..谢谢你的建议,它的工作 –

0

首先,请注意Saxon- CE正被Saxon-JS所取代。

其次,ixsl:set-attribute具有延迟效果 - 只有在当前转换阶段(即onclick事件的处理)完成时才会进行更新。

但话虽如此,我不确定这是否到底。我经常发现在这个领域中混淆的一件事是HTML DOM中的属性(如值)与底层属性(如checked属性)之间的区别,它们并不总是同步。

调试是否显示onclick模板实际执行?