1

繰り返しコントロールに EditBox コントロールがあります。その反復式は次のとおりです。

return 5;

4 つの編集ボックスが正常に表示されています (開始インデックスは 1 に設定されています)。

SSJSでは、n番目の編集ボックスの値を取得するにはどうすればよいですか?

4

4 に答える 4

2

編集ボックスのonchangeイベントでsessionScope変数(または任意のスコープ変数)を設定してから、SSJSでsessionScope変数を参照できます。ここにいくつかのサンプルコードがあります。一番下のビットは、ページ上のsessionScope変数を示しています。

<?xml version="1.0" encoding="UTF-8"?>

<xp:repeat id="repeat1" rows="30" value="#{javascript:5}"
    indexVar="rptIndex">

    <xp:inputText id="inputText1">

    <xp:eventHandler event="onchange" submit="true" refreshMode="complete">
        <xp:this.action>
            <xp:executeScript>
                <xp:this.script><![CDATA[#{javascript:sessionScope['text'+rptIndex] = getComponent("inputText1").getValue()}]]></xp:this.script>
            </xp:executeScript>
        </xp:this.action></xp:eventHandler></xp:inputText>

</xp:repeat>



<xp:table styleClass="debug">
<xp:tr>
<th>Variable Name</th>
<th>Variable Content</th>
</xp:tr>
<xp:repeat id="varRepeat" rows="30" value="#{javascript:sessionScope.keySet();}" var="scopeData">
<xp:tr>
<xp:td>
<xp:text escape="true" id="varName" value="#{javascript:scopeData}" />
</xp:td>
<xp:td>
<xp:text escape="true" id="varValue" value="#{javascript:sessionScope.get(scopeData)}" />
</xp:td>
</xp:tr>
</xp:repeat>
</xp:table> 
</xp:view>
于 2012-04-04T19:48:30.850 に答える
2

送信を onChange イベントに追加すると、かなりおしゃべりなアプリケーションが作成されます。フォーカスを設定するためのソリューションはかなり異なります。まず、フォーカスはクライアント側の操作であるため、「どのコントロールが最初の失敗であるかを認識する」クライアント スクリプトが必要です。良いニュース: XPages は、サーバー側の検証に失敗したすべてのフィールドに属性 aria-invalid=true を追加します。そのため、それを照会してフォーカスを結果の最初のメンバーに設定する dojo.onLoad スクリプトを使用できます。http://dontpanic82.blogspot.com/2011/07/xpages-styling-invalid-field.htmlも参照してください 。クエリ構文については、http: //dojotoolkit.org/reference-guide/1.7/dojo/query.htmlを参照してください。

于 2012-04-05T01:17:38.403 に答える
1

控えめに言っても、繰り返しは対処するのが楽しいです。チームルーム テンプレートの mobileThread カスタム コントロールの例を見ると、返信のリストを表示するための繰り返しが表示されます。たとえば、ボタン 1 回のクリックでスクリプトを実行すると、多くの JavaScript が実行されます。リピート内のすべてのボタンに。

検証の問題を探している場合は、stwissel のソリューションが最適です。これが別のもので、ある時点で特定の編集ボックスの値だけが必要な場合は、次のように考える必要があります。

var domEl = dojo.byId(' <repeatControlId> ');
var textBoxes = domEl.getElementsByTagName("input");
var certainValue = textBoxes[3].value;

これで、特定の値に特定の編集ボックスの値が含まれるようになりました。

これを試していないので、少し調整する必要があるかもしれませんが、一般的なアイデアはうまくいくはずです。

于 2012-04-05T08:31:08.573 に答える
1

コードを追加できるように、別のコメントを追加しました。

簡単なテストを行ったところ、問題なく動作しました。以下の例を参照してください。それが役に立てば幸い。プリントアウトを追加して、各ビットが取得されていることを確認してください。

<xp:repeat id="TestRepeat" rows="100" var="rowData"
    indexVar="commentIndex" first="0" rendered="true">
    <xp:this.value><![CDATA[#{javascript:
        var dataArray = new Array();
        dataArray.push(" Test");
        dataArray.push(" Test");
        dataArray.push(" Test");
        dataArray.push(" Test");
        dataArray.push(" Test");
        return dataArray;
    }]]></xp:this.value>

    <xp:panel>
        <xp:label value="Test"></xp:label>
        <xp:inputText id="inputText1" value="Test" defaultValue="Test">
        </xp:inputText>
        <xp:br></xp:br>
    </xp:panel>

</xp:repeat>

<xp:button value="Test" id="button1">
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script>
            <xp:executeClientScript>
                <xp:this.script><![CDATA[
                var domEl = dojo.byId('#{id:TestRepeat}');
                var textBoxes = domEl.getElementsByTagName("input");
                alert( "Value 1: " + textBoxes[0].value);
                ]]></xp:this.script>
            </xp:executeClientScript>
        </xp:this.script>
    </xp:eventHandler>
</xp:button>
于 2012-04-05T15:00:56.527 に答える