обнаружение изменений формы с помощью jquery, когда сами изменения формы были вызваны JS - PullRequest
0 голосов
/ 13 июля 2011

У меня есть список переключателей, которые я могу переключить «да» или «нет» на использование JavaScript.

    $(document).ready(function(){
    $('#select-all').click(function(){
        $('#notifications .notif-radio').each(function(){
            $('input[type="radio"]', this).eq(0).attr('checked', true);
            $('input[type="radio"]', this).eq(1).attr('checked', false);
        });
    });
    $('#deselect-all').click(function(){
        $('#notifications .notif-radio').each(function(){
            $('input[type="radio"]', this).eq(0).attr('checked', false);
            $('input[type="radio"]', this).eq(1).attr('checked', true);
        });
    });
});

это работает просто отлично.Теперь у меня есть отдельный кусок кода, который определяет, когда пользователь что-то изменил.и спрашивает их, хотят ли они покинуть страницу.

            var stay_on_page;

        window.onbeforeunload = confirm_exit;

        $('.container form input[TYPE="SUBMIT"]').click(function(){
            stay_on_page = false;
        });

        $('#wrapper #content .container.edit-user form').change(function(){
            stay_on_page = true;
        });

        function confirm_exit()
        {
            if(stay_on_page){ return "Are you sure you want to navigate away without saving changes?"; }
        }

проблема заключается в том, что если пользователь использует первую функциональность для переключения всех переключателей тем или иным способом.JS, обнаруживший изменения формы, не видит, что форма была изменена.Я пытался использовать .live, но безрезультатно.У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 13 июля 2011

Я делаю что-то похожее на это, добавляя изменения () (или что угодно, click () в вашем случае, я полагаю) обработчики событий, которые устанавливают видимое или скрытое значение поля, а затем проверяют это значение как часть вашей функции onbeforeunload .

Итак, мой перед выгрузкой выглядит так:

window.onbeforeunload = function () {
      if ($('#dirtymark').length) {
           return "You have unsaved changes.";
      }
};

И, конечно же, грязная метка добавляется на страницу (красная звездочка рядом с кнопкой Сохранить), когда страница становится грязной.

...