1

送信ボタンから SSJS を使用してフォームを検証しています。ユーザーにエラーを表示するには、拡張ライブラリ ダイアログ ボックスを使用しています。

SSJSを使用して、検証に失敗したフィールドにフォーカスを設定するにはどうすればよいですか?

私にできることの 1 つは、ダイアログ ボックスの [OK] ボタンで CSJS を使用することです。次のようにOKボタンで閉じます。

var errorField = '#{javascript:viewScope.get("errorField")}';

以下を試してみましたが、うまくいかないようです。

if (errorField != null &&  errorField != "")
{   
var ef = document.getElementsByName("#{id:" + errorField + "}");
ef.focus();

}

実際の検証を行うときに、スコープ変数 errorField を設定しています。

4

3 に答える 3

4

はい、行方不明の結腸が悪いです。試してみましたが、id式を分割してもうまくいかないようです。

エラーフィールドのIDに設定されたviewScopeがあります。それを次のように設定することは可能ですか:

getComponent('...').getClientId();

それができれば、次のように実行できます。

var errorField = '#{javascript:viewScope.get("errorField")}';

var ef = dojo.byId(errorField);
ef.focus();

それは私にとってはうまくいきます。

于 2012-04-05T08:08:00.737 に答える
3

使用してみてください:

var ef = dojo.byId('#{id'+errorField+'}');
ef.focus();

getElementsByName は name="..." を持つ複数の要素を探し、配列を返します。コントロールの配列にフォーカスを設定することはできません。

XPages の場合と同様に、すべてのコントロールに一意の ID があるため、Dojo を使用して ID を検索すると、単一の要素が返されます。

于 2012-04-04T13:39:59.670 に答える
1

部分的な (または完全な) 更新が完了したら、フォーカスを設定してみてください。

        <xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[ var ef = dojo.byId('#{javascript:getClientId(viewScope.get("errorField"))}');
                    ef.focus();]]></xp:this.script>
    </xp:eventHandler>
于 2012-04-04T18:04:21.810 に答える