我有ap:accordionPanel,在面板的每个标签内都有一些用户可以操作的信息,我需要做的是如果用户关闭标签显示确认对话框(在标签关闭之前)类似“你确定要关闭标签吗?如果你做了改变就会丢失”。这是我试过的
<p:ajax event="tabClose" onstart="return myFunction()"
listener" {myBean.myMethod}" process="@this" />
function myFunction() {
var answer = confirm("are you sure you wanna close the tab? if you do your changes will be lost");
if(answer){
//some logic
return true;
}else{
//some logic
return false;
}
}
问题是,如果我在确认对话框中选择取消,则选项卡仍会关闭。 onStart="return false"
是否应取消标签关闭?有没有办法实现我想要做的事情?
答案 0 :(得分:1)
最后我解决了我的问题,显然onStart="return false"
并没有阻止标签更改其状态但onTabChange
的{{1}}属性确实存在,唯一的问题是由于某种原因当选项卡被打开时关闭选项卡时,手风琴的p:accordionPanel
事件不会执行,所以我必须覆盖acordionPanel取消选择primefaces的函数来调用onTabChange事件
onTabchange
然后我只需要将PrimeFaces.widget.AccordionPanel.prototype.unselect = (function(index) {
var cached_function = PrimeFaces.widget.AccordionPanel.prototype.unselect;
return function() {
var panel = this.panels.eq(index);
if(this.cfg.onTabChange) {
var result = this.cfg.onTabChange.call(this, panel);
if(result === false)
return false;
}
var result = cached_function.apply(this, arguments);
return result;
};
})();
放在acciongiong面板(myFunction();
)的onTabChange事件上就行了。