2016-11-29 35 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模板實際執行?