1

入力フィールドが有効になっている場合、 はそのフィールドのラベルの生成された ID を変更します。

ないのソース:

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

フィールドのあるページのソース:

<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 に答える