Принудительная проверка dirtyforms.js
Я пытаюсь проверить наличие грязной формы при переходе между вкладками, а если форма грязная, показать предупреждение.
Я использую этот плагин: https://github.com/snikch/jquery.dirtyforms
Ii отлично работает при попытке перейти на внешнюю страницу (здесь я получу предупреждение), но когда я переключаюсь между вкладками (начальной загрузки), ничего не происходит. Я создал специальный класс (". ChkChange") для прослушивания, если форма грязная, но ничего не происходит, когда я нажимаю на вкладку. Вкладки выглядят так:
<li class="setup-conditions"><a data-toggle="tab" class="chkChange" href="#setup-conditions">Procedure</a></li>
И я могу проверить, является ли форма грязью или нет с помощью этого фрагмента, но мне нужна помощь, чтобы вызвать сборку предупреждений в dirtyforms:
$('#myTab li a').click(function () {
if ($('form').dirtyForms('isDirty')) {
//alert("Form is dirty");
}
});
И, как я уже сказал, если я помещу тот же класс в другую (внешнюю) ссылку, он выдаст запрос, если что-то было изменено - бот не на вкладках.
1 ответ
В этом случае вы можете настроить привязку события, чтобы прикрепить обработчик кликов к вашей ссылке.
$(document).bind('bind.dirtyforms', function (ev, events) {
var originalBind = events.bind;
events.bind = function (e) {
$('#myTab li a').on('click', events.onAnchorClick);
originalBind(e);
};
});
Грязные формы будут тогда правильно
- Проверьте, не загрязнена ли форма
- Если грязный, предотвратить событие клика
- Показать диалог
- Если пользователь решит продолжить, обновит событие click
Dirty Forms автоматически игнорирует ваш якорный тег, потому что у него нет тега HREF. Эта функция была предоставлена сообществом, которую я сейчас пересматриваю, потому что, очевидно, есть аргумент для отслеживания якорных тегов, которые иногда не имеют HREF.
Обновить
Поведение по умолчанию изменилось в 2.0.0-beta00005 и теперь включает ссылки без тега HREF по умолчанию. Это должно исправить это, чтобы вам не нужно было прикреплять событие. Однако, в зависимости от того, какие библиотеки вы используете, вам может понадобиться добавить ignoreSelector
в грязные формы, чтобы перестать смотреть их.
$('form').dirtyForms({ ignoreSelector: 'a.some-class:not([href])' });