2017-04-03 90 views
0

创建元素时,我需要将更改值添加到data-id属性(正在工作),但是一旦设置了此值,我需要保存它。问题是,如果在创建表单期间更改了任何顺序,则ID将会更改,并且对于data-id我需要一个固定值。有任何想法吗。XSL - 如果值不存在,则将值添加到属性

我有用于创建输入元件这样的代码:

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

回答

1

在HTML中,的reqired="required"反面不是required="false"。阅读spec on boolean attributes

布尔属性不允许使用值“true”和“false”。为了表示一个错误的值,该属性必须完全省略。

只要字段是可选的,只需省略“required”属性即可。

此外您还缺少attribute value templates。一般情况下通常不需要<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代码中取出。

+0

感谢您的深刻见解:)。我没有制作xls代码,有点继承它,现在我们无法改变它,所以我有了几乎4k行纯粹的混沌。 – Sasha

+0

有乐趣清理混乱。 :)顺便说一句,你可以编写XSL模板来重写你的XSL模板。就像一个想法。如果你的输入XSL是重复的,那将是清理它的一种方法。 – Tomalak

相关问题