У меня на странице есть приложение для калитки. У нас есть разные формы для одной и той же модели, разделенные на отдельные вкладки.Что мне нужно сделать, так это всякий раз, когда нажимается вкладка, чтобы проверить, установлена ли переменная 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
Мне нужно изменить, но оно просто не регистрируется у меня.