【发布时间】:2018-10-18 18:42:16
【问题描述】:
我在一个页面上有一个检票口应用程序,我们将同一模型的各种表单分成单独的选项卡。我需要做的是每当单击选项卡时检查 js 变量 tabDirty 是否设置为 true 或 false。如果是true,我会启动confirm 提示,如果没问题,然后重置该表单并移动到单击的选项卡。如果取消保留在该选项卡上并保持当前更改。
我有这个 js 用于警告没什么特别的
function warnOnChange(){
if(tabDirty){
decision = confirm('Leave?');
if(decision){
resetTab(); //sets tabDirty back to false
} else {
return false;
}
}
}
我有一个超级简单的检票口行为
public class WarnChangePromptOnClickBehavior extends Behavior {
@Override
public void bind(Component component) {
component.add(JQBehaviors.mouseClick(EditMerchant.WARN_ON_CHANGE));
}
}
并且该行为被添加到 AjaxFallBackLink
AjaxTabbedPanel<CustomAjaxTab> tabbedPanel = new AjaxTabbedPanel<CustomAjaxTab>("tabbedPanel", tabList, new Model<>(0)) {
private static final long serialVersionUID = 1L;
@Override
protected WebMarkupContainer newLink(final String linkId, final int index) {
AjaxFallbackLink<Void> link = new AjaxFallbackLink<Void>(linkId) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(final AjaxRequestTarget target) {
TabbedPanel<CustomAjaxTab> selectedTab = setSelectedTab(index);
CustomAjaxTab tab = tabList.get(index);
if (target != null) {
tab.getPanel(linkId);
target.add(selectedTab);
}
onAjaxUpdate(target);
}
};
link.add(new WarnChangePromptOnClickBehavior());
return link;
}
};
当前的行为是,如果没有更改选项卡切换没有提示。如果有变化,我会得到提示。如果没问题tabDirty 被重置并转到下一页清除更改。问题是,如果我单击取消,我仍会导航到下一个选项卡并丢失更改。我知道onClick 中有一些东西我需要更改,但它只是没有向我注册。
【问题讨论】:
标签: java jakarta-ee wicket