2013-05-22 57 views
0

根据条件,我们只需要显示1个标签。这是通过Javascript完成的。这工作正常,但问题是我们得到一个508兼容错误,说1个表单元素有2个标签。这个问题与表中的“for”有关。删除它也会显示508错误。我厌倦了将第二个标签更改为=“org.dateOfReg”,但仍然相同。有没有办法只有一个标签,并从JavaScript动态地传递“for”和“name”值?或者还有其他的选择吗?请帮忙。非常感谢。Struts2 s:标签问题

<tr id="showDates"> 
     <td id="TypeDate1"><s:label for="dateOfReg" name="dateofReg" value="Date of Interest" /><span class="required" >*</span> :</td> 
     <td id="TypeDate2"><s:label for="dateOfReg" name="dateofReg" value="Date of Completion" /><span class="required" >*</span> :</td>          
     <td id="typeDatePick"> 
     <sj:datepicker showButtonPanel="true" id="dateOfReg" name="org.dateOfReg" displayFormat="mm/dd/yy" label="Date of Interest" changeMonth="true" changeYear="true" size="7"/> 
     </td> 
    </tr> 

感谢

哈利

+0

如果您想通过JavaScript显示标签,那么只*通过JavaScript显示标签。只隐藏DOM元素不会*删除* DOM元素。动态构建标签,或动态设置单个标签的值。 –

+0

谢谢戴夫。你有一个简单的例子来说明如何从js建立动态标签吗?谢谢 – Harry

+0

同样你在JS中构建任何DOM元素,尽管我会使用像jQuery或任何你喜欢的支持库。 –

回答

0

这里是你可以做什么来解决这个问题。只需使用一个标签并使用JavaScript更改其innerHTML,而不是隐藏标签。

<tr id="showDates"> 
    <td id="TypeDateLabel"><s:label for="dateOfReg" name="dateofReg" value="Date of Interest" /><span class="required" >*</span> :</td> 
    <td id="typeDatePick"> 
     <sj:datepicker showButtonPanel="true" id="dateOfReg" name="org.dateOfReg" displayFormat="mm/dd/yy" label="Date of Interest" changeMonth="true" changeYear="true" size="7"/> 
    </td> 
</tr> 
<script language="javascript"> 
    function TriggerToChangeLabel(triggerCondition) 
    { 
     if (triggerCondition) 
      $("dateOfReg").innerHtml = "Date of Interest"; 
     else 
      $("dateOfReg").innerHtml = "Date of Completion"; 
    } 
</script> 

但请记住,即使它使代码508兼容;动态更改标签文本违背了可访问性的精神。更好的实现方法是拥有两个日期字段(“感兴趣日期”和“完成日期”)。提交后,根据您对标签更改的条件,在其中一个字段上强制执行“必需”编辑。