Jquery UI Accordion - Отмена Изменить - PullRequest
       24

Jquery UI Accordion - Отмена Изменить

3 голосов
/ 29 сентября 2010

Я уже давно борюсь с этим.

Я хочу получить подтверждение (), прежде чем кто-то поменяет аккордеон.

Я попробовал:

$(document).ready(function() {

    var edited = false;

    $(".accordion-me").accordion({
        autoHeight: false,
        navigation: true,
        changestart: function(event, ui) {
            if (edited) {
                if (!confirm("You have unsaved changes. Do you want to navigate away?") {
                    event.preventDefault();
                    event.stopPropagation();
                    event.stopImmediatePropagation();
                    return false;
                }
            }
        }
    });
});

С небольшой радостью!Я также попробовал что-то вроде этого

   $(".accordion-me h3").each(function() {

                    $(this).unbind("click");

                    $(this).click(function(e) {

                        if (confirm("You have unsaved changes! Do you want to navigate away?")) {
                            $(this).unbind("click");
                            $(".accordion-me").accordion({
                                autoHeight: false,
                                navigation: true,
                                changestart: function(event, ui) {
                                    if (edited) {
                                        if (!confirm("You have unsaved changes. Do you want to navigate away?") {
                                            event.preventDefault();
                                            event.stopPropagation();
                                            event.stopImmediatePropagation();
                                            return false;
                                        }
                                    }
                                }
                            });                            
                            $(this).click();
                        }
                    });
                });

Но опять же без радости.

Любая помощь будет принята с благодарностью.

Приветствия

Ответы [ 2 ]

4 голосов
/ 19 сентября 2011

Используйте пустое событие при создании аккордеона, что позволит вам управлять событием щелчка аккордеона с помощью функции jQuery .click.Затем вы можете обработать окно подтверждения и позволить событию щелчка по аккордеону выполняться только в случае подтверждения.

$(document).ready(function()
{
    var edited = false,
        accordion_me = $('.accordion-me');

    // activate the accordion, but with an empty event
    accordion_me.accordion({
        autoHeight: false,
        navigation: true,
        event: ''
    });

    // here's the new accordion event
    $('.accordion-me h3').click(function()
    {
        // find the index of the event being called
        var i = $('.accordion-me h3').index(this);

        // if we have unsaved changes and do not confirm, stop accordion execution      
        if (edited && !confirm('You have unsaved changes. Do you want to navigate away?'))
        {
            return false;
        }

        // continue with the accordion execution. Activate the requested event index.
        accordion_me.accordion('activate', i);

        return false;
    });
});

Если ваш аккордеон разборный (как и мой), ваш аккордеон все равно будет работать так же, как и раньше.Кроме того, если у вас есть только один аккордеон, я бы порекомендовал использовать id для его вызова вместо класса .accordion-me, что сэкономит некоторые накладные расходы.Если вам все еще нужно использовать класс для его вызова, поместите перед ним тег html, т.е. div.accordion-me.

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

Вы должны привязать его к событию щелчка на теге привязки. Например, если ссылки вашего заголовка:

<a href="#" class="accordionHeaderLink">header 1</a>

код будет (также в функции document.ready)

$('.accordionHeaderLink').click(function(){
    if (!confirm("You have unsaved changes. Do you want to navigate away?")) {
        return false;
    }
});
...