1

我正在使用提交按钮中的 SSJS 验证我的表单。为了向用户显示错误,我正在使用扩展库对话框。

如何使用 SSJS 将焦点设置到验证失败的字段?

我可以做的一件事是在对话框的 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 表达式时,它似乎对我也不起作用。

您将 viewScope 设置为错误字段的 id,是否可以将其设置为:

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