我的问题的简短概述:我有一个包含多个字段的大表单,其中一个是xe:djFilteringSelect
,另一个是xp:combobox
。 xp:combobox
是computet,具体取决于过滤选择中选择的值。现在,我的客户希望如果他们更改过滤选择已保存的文档的值,则应提示他们发出警告。所以我想在djfiltering
选择的onChange事件中添加一条确认消息,取消它改变组合框的SSJS代码。
提示用户确认(“更改值?...”)框没什么大不了的,但如果用户选择“否”,则重新设置值(在ClientSide上)会给我带来很多麻烦。
我已经尝试过:
如果我使用简单确认操作,则所有进一步的onChange操作都会被取消,但djFilteringSelect
字段会保留用户选择的值。因此,如果我在过滤时触发部分刷新,则选择原始值形式文档显示但我不知道在哪里添加它因为没有onCancel或者我错过了什么?
我还使用 window.confirm 和 XSP.confirm 从CSJS尝试了它,如果用户选择“否”,则使用XSP.partialrefreshGet()重置值手册'但在这种情况下,部分刷新不起作用:
if(!XSP.confirm("execute?")){
XSP.partialRefreshGet("#{id:repeat1}",{
onStart: function () {console.log("start");},
onComplete: function () {console.log("finish");},
onError: function () {console.log("error");}
});
return false;
}
如果我将部分刷新移动到一个函数并从中调用它firebug它工作正常,但如果我在if(确认){}内部调用它它什么都不做。返回false确实有效,SSJS无法执行。文档中的值不会更改(按预期),但djFilteringSelect会将所选值保留在ClientSide上。
我也尝试了Mark Leusink的dojo-style Confirm,但是在这里部分刷新也遇到了同样的问题。
如果我将值设置为手动而不是使用dijit.byId(item).setValue的部分刷新,它将在另一个onChange事件...循环中重新生成。 更新:如果我使用dijit.byId(item).set(“value”,newVal,false),onChange不会直接触发它按预期更改值,但是当过滤选择时onChange会触发失去了焦点!?!? ...
所以我的问题:
更新: 我当前的“解决方案”是使用window.location.reload()而不是XSP.partialRefresh来重新加载站点。但是这个解决方案并不能让我满意,因为在IE中整个页面都在闪烁..在firfox中我可以忍受它。