1

如果为该字段启用了会更改为输入文本字段生成的标签 ID 。

1. 上的源代码没有

<xp:tr> <th scope="row">
<xp:label id="labelClientRapporteur" for="clientRapporteur"> <xp:this.value><![CDATA[${javascript:clientData['clientRapporteur']}]]></xp:this.value> </xp:label> </th> <xp:td> <xp:inputText id="clientRapporteur" value="#{complaintDocument.clientRapporteur}">
</xp:inputText> </xp:td> </xp:tr>

2.以及浏览器中页面的来源:

<tr> <th scope="row"> <label id="view:_id1:_id2:_id31:_id45:labelClientRapporteur" class="xspTextLabel" for="view:_id1:_id2:_id31:_id45:clientRapporteur">Ügyfélreferens</label> </th> <td> <input id="view:_id1:_id2:_id31:_id45:clientRapporteur" class="xspInputFieldEditBox" type="text" name="view:_id1:_id2:_id31:_id45:clientRapporteur"> </td> </tr>

3.为相同输入启用输入时的

<xp:tr> <th scope="row">
<xp:label id="labelClientRapporteur" for="clientRapporteur"> <xp:this.value><![CDATA[${javascript:clientData['clientRapporteur']}]]></xp:this.value> </xp:label> </th> <xp:td> <xp:inputText id="clientRapporteur" value="#{complaintDocument.clientRapporteur}"> <xp:typeAhead mode="partial" minChars="1" ignoreCase="true" valueList="#{javascript:return namesTypeAhead();}" var="lupkey" valueMarkup="true"> </xp:typeAhead> </xp:inputText> </xp:td> </xp:tr>

4. 以及浏览器中带有字段的页面的来源:

<tr> <th scope="row"> <label id="view:_id1:_id2:_id31:_id45:clientRapporteur_label" class="xspTextLabel" for="view:_id1:_id2:_id31:_id45:clientRapporteur">Ügyfélreferens</label> </th> <td> <span id="view:_id1:_id2:_id31:_id45:_id78" mode="partial" jsid="view__id1__id2__id31__id45__id78" dojotype="ibm.xsp.widget.layout.data.TypeAheadReadStore"></span> <div id="widget_view:_id1:_id2:_id31:_id45:clientRapporteur" class="dijit dijitReset dijitInlineTable dijitLeft xspInputFieldEditBox dijitTextBox dijitComboBox" role="combobox" widgetid="view:_id1:_id2:_id31:_id45:clientRapporteur" aria-labelledby="view:_id1:_id2:_id31:_id45:clientRapporteur_label"> </td> </tr>

5. 为标签生成的 id 为:

view:_id1:_id2:_id31:_id45:clientRapporteur_label

, 而不是

view:_id1:_id2:_id31:_id45:clientRapporteur

. 问题是,我使用

setTextLabelForRequired("#{id:labelClientRapporteur}");

更改标签的样式,此代码在这种情况下不起作用,因为标签的 id 已更改。

我想知道如何解决这个 id 更改,或者最好的解决方法是什么?

4

1 回答 1

2

在我看来,这是一个可行的解决方法。最佳方案是拥有唯一的 jsid ofc。

这会

  1. 使用选择器循环所有节点
  2. 循环所有文本框
  3. 通过 domNode 查找注册的小部件(不确定逻辑如何,但通过 Id 肯定更好)

所以:

var arr = dojo.filter(dojo.query('.xspInputFieldEditBox'), function(domNode) {

   if(/labelClientRapporteur/.test(domNodes.className))
      return true;

});
var widget = dijit.getEnclosingWidget(arr[0]);

或者更松散的匹配:

var nodes = dojo.query('.xspInputFieldEditBox[id*="labelClientRaporteur"]');
var domNode = nodes[0];
于 2012-08-17T09:41:12.393 回答