Принудительная проверка 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);
    };
});

Грязные формы будут тогда правильно

  1. Проверьте, не загрязнена ли форма
  2. Если грязный, предотвратить событие клика
  3. Показать диалог
  4. Если пользователь решит продолжить, обновит событие click

Dirty Forms автоматически игнорирует ваш якорный тег, потому что у него нет тега HREF. Эта функция была предоставлена ​​сообществом, которую я сейчас пересматриваю, потому что, очевидно, есть аргумент для отслеживания якорных тегов, которые иногда не имеют HREF.

Обновить

Поведение по умолчанию изменилось в 2.0.0-beta00005 и теперь включает ссылки без тега HREF по умолчанию. Это должно исправить это, чтобы вам не нужно было прикреплять событие. Однако, в зависимости от того, какие библиотеки вы используете, вам может понадобиться добавить ignoreSelector в грязные формы, чтобы перестать смотреть их.

$('form').dirtyForms({ ignoreSelector: 'a.some-class:not([href])' });
Другие вопросы по тегам