创建元素时,我需要将值添加到 data-id 属性(这是有效的),但是一旦设置了这个值,我就需要保留它。问题是,如果在创建表单期间更改了任何顺序,则会更改ID,对于 data-id ,我需要一个固定值。任何想法。
我有用于创建输入元素的代码:
<div class="field" align="left">
<xsl:element name="input">
<xsl:attribute name="id"><xsl:value-of select="$field_id" /></xsl:attribute>
<xsl:attribute name="name"><xsl:value-of select="$field_id" /></xsl:attribute>
<xsl:attribute name="type">text</xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="." /></xsl:attribute>
<xsl:attribute name="maxlength"><xsl:value-of select="@maxlength" /></xsl:attribute>
<xsl:attribute name="minlength"><xsl:value-of select="@minlength" /></xsl:attribute>
<xsl:attribute name="class">text</xsl:attribute>
<xsl:attribute name="data-id">
<xsl:value-of select="$field_id" />
</xsl:attribute>
<xsl:attribute name="required">
<xsl:choose>
<xsl:when test="@required='required'">required</xsl:when>
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:attribute name="onchange">
fieldPropertyChange('smalltext', '<xsl:value-of select="$field_id" />');
</xsl:attribute>
</xsl:element>
答案 0 :(得分:1)
在HTML中,reqired="required"
的反面不是{{1}}。阅读spec on boolean attributes。
布尔属性不允许使用值“true”和“false”。要表示错误值,必须完全省略该属性。
如果字段是可选字段,请忽略“required”属性。
此外,您缺少attribute value templates。一般不需要required="false"
,而且样本中根本不需要<xsl:attribute>
。 <xsl:element>
也是如此。
以下是您的代码应该是什么样的。
<div class="field" align="left">
<input
id="{$field_id}" name="{$field_id}" type="text" class="text"
value="{.}" data-id="{$field_id}"
onchange="fieldPropertyChange('smalltext', '{$field_id}')"
>
<xsl:copy-of select="@maxlength|@minlength|@required[. = 'required']" />
</input>
</div>
你想要一个带有一堆属性的<input>
。并且您希望复制属性@maxlength
,@minlength
(如果它们存在于源中)和@required
(但前提是它在源中实际上具有值'required'
)。
<xsl:copy-of>
是正确的选择。
另外请注意,您可能想摆脱onchange
。我建议您使用jQuery和单独的脚本文件进行事件处理,并将所有Javascript保留在HTML代码之外。