【问题标题】:Saxon-CE_1.1 set-attribute doesn't update an input element's attribute once it's value has been manually changed一旦手动更改了输入元素的值,Saxon-CE_1.1 set-attribute 就不会更新它的属性
【发布时间】:2016-11-29 08:00:21
【问题描述】:

我对 XSLT 和使用 Saxon CE 处理器还很陌生。我正在编写一个转换,其中提交按钮的 onclick 事件将复选框的“选中”状态写入文本字段。只要不手动编辑文本,它就可以正常工作。手动编辑文本后,任何后续的 onclick 事件都无法将复选框状态写入文本字段。

我不确定我做错了什么。下面是 xsl 文件的代码 sn-p。非常感谢任何帮助或建议来解决我花了一天时间思考的这个谜题。

<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>

【问题讨论】:

  • 我希望人们不会在不说明原因的情况下对问题投反对票。我在这里看不到任何值得投反对票的东西。

标签: xslt saxon


【解决方案1】:

使用 Javascript 和 Saxon,要操作表单控件,您需要设置控件的属性,而不是属性,因此请使用 ixsl:set‑property

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

【讨论】:

  • 抱歉回复晚了..感谢您的建议,它成功了
【解决方案2】:

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

第二,ixsl:set-attribute 有延迟作用——只有在当前的转换阶段(即onclick事件的处理)完成时才进行更新。

但话虽如此,我不确定这是否能深入人心。在这方面我经常发现令人困惑的一件事是 HTML DOM 中的属性(例如 value)和底层属性(例如 checked 属性)之间的区别,它们并不总是同步的。

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

【讨论】:

    【解决方案3】:

    使用 Saxon-JS,以下似乎有效(在 HTML 中将 name 属性更改为 id 属性后):

    <xsl:template match="*[@id='btnShowText']" mode="ixsl:onclick">
      <ixsl:set-property name="value" object="id('txtResult',ixsl:page())"
        select="ixsl:get(id('chk1',ixsl:page()), 'checked')"/>
    </xsl:template>
    

    我没有让任何其他变体工作,特别是 //input[@id='txtResult'] 的应用模板未评估/不匹配。我怀疑这是由于我的命名空间 HTML 源,而且 *:input 不匹配。

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2011-07-24
      • 1970-01-01
      • 2016-10-27
      • 2020-07-10
      相关资源
      最近更新 更多