在xpage中我有两个select2列表。第一个选择框中的选项指示第二个选择框中的选项。
列表是通过列表框控件定义的。
为了将select2应用于它们,我有一个scriptblock
$(document).ready(
function(){
x$("#{id:list1}").select2();
}
)
$(document).ready(
function(){
x$("#{id:list2}").select2();
}
)
$(document).ready(
function(){
x$("#{id:list1}").on("change", function(e) {
XSP.partialRefreshPost("#{id:pnlList2}"
})
pnlList2包含第二个列表框。
问题是当第一个列表框的值发生变化时,会触发第二个列表的验证。
我尝试申请参数:
'params': {
'disableVal':'true'
}
但是这不能按预期工作。
任何人都有建议吗?
答案 0 :(得分:2)
有几种方法可以解决这个问题,但我更喜欢表现最好的方法,即部分执行。部分执行应该是强制性的最佳实践。
您的代码会发生这样的情况:您在验证整个页面的同时刷新页面的一部分。通过这样做,第二个选择被捕获而没有价值。
我会为组合框定义onchange
参数 - 而不是事件处理程序 - 这样select2会自动获取事件,而不会像以后那样通过JavaScript声明它。
只需使用:
<xp:combobox onchange=“XSP.partialRefreshPost('#{id:select2Id}', { execId: '#{id:select1Id}' }”
正如我所说,select2会看到以这种方式声明的onchange并尊重它。当它将仅触发时,将评估combobox1,从而自动跳过页面上的任何其他验证,因为不包括在内。此时第二个选择不会抱怨并刷新。
另一个建议是使用select2重新初始化第二个组合框,因为部分刷新会破坏它。最好扩展部分刷新区域以包括特定于第二个选择的组合框和scriptBlock。