xPages - 如何在刷新后在页面上的不同时间设置焦点

时间:2016-10-03 16:30:55

标签: xpages

我尝试过很多不同的事情。我有一个刷新的xpages多次,并根据输入的进展,我想专注于不同的领域。最新的是使用输出脚本和以下代码,但是,它似乎没有识别viewScope变量,因此它专注于页面上的第一个字段或根本没有焦点。我通过渐进在不同时间设置了viewScope变量。

我的问题:

  1. 我在哪里放置输出脚本,因为只有部分页面显示在进度的开头。

  2. 我可以使用哪些代码来提高效率并识别要关注的各个地方?

  3. 有比输出脚本更好的方法吗?

  4. 以下是我正在使用的代码......

    var vNextFocus = viewScope.vsNextFocus;
    if(vNextFocus == "CustomerName") {
        XSP.getElementById("#{id:CustomerName}").focus();
    }
    if(vNextFocus == "PONbr") {
        XSP.getElementById("#{id:PONbr}").focus();
    }
    

    等......

1 个答案:

答案 0 :(得分:2)

您的代码是SSJS和CSJS的混合。

在您的XPage中添加onClientLoad事件 计算应该关注的客户端ID 服务器端#{javascript: ...get client id on server side...} 将结果作为字符串放入CSJS代码XSP.getElementById("...").focus() 这样,在viewScope.vsNextFocus中设置的字段将获得焦点。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:eventHandler
        event="onClientLoad"
        submit="false">
        <xp:this.script><![CDATA[
            XSP.getElementById("#{javascript:
                try {
                    getComponent(viewScope.vsNextFocus).getClientId(facesContext);
                } catch(e) {
                    getComponent('inputText1').getClientId(facesContext);
                }
            }").focus();
        ]]></xp:this.script>
    </xp:eventHandler>
    ... your controls ...
</xp:view>

以防viewScope.vsNextFocus没有设置代码默认为字段&#34; inputText1&#34;。