我尝试过很多不同的事情。我有一个刷新的xpages多次,并根据输入的进展,我想专注于不同的领域。最新的是使用输出脚本和以下代码,但是,它似乎没有识别viewScope变量,因此它专注于页面上的第一个字段或根本没有焦点。我通过渐进在不同时间设置了viewScope变量。
我的问题:
我在哪里放置输出脚本,因为只有部分页面显示在进度的开头。
我可以使用哪些代码来提高效率并识别要关注的各个地方?
有比输出脚本更好的方法吗?
以下是我正在使用的代码......
var vNextFocus = viewScope.vsNextFocus;
if(vNextFocus == "CustomerName") {
XSP.getElementById("#{id:CustomerName}").focus();
}
if(vNextFocus == "PONbr") {
XSP.getElementById("#{id:PONbr}").focus();
}
等......
答案 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;。