Jquery UI手风琴 - 取消更改

时间:2010-09-29 12:33:56

标签: jquery-ui accordion jquery jquery-ui-accordion

我一直在和这个人搏斗一段时间。

我希望在有人改变手风琴之前有一个确认()。

我试过了:

$(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 个答案:

答案 0 :(得分:4)

在创建手风琴时使用空事件,这将允许您使用jQuery .click函数管理手风琴的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;
    });
});

如果您的手风琴是可折叠的(就像我的手风琴一样),您的手风琴仍然可以像以前一样工作。 另外,如果您只有1个手风琴,我建议使用id来调用它而不是.accordion-me类,这将节省一些开销。 如果您仍然需要使用类来调用它,请在它之前放置一个html标记,即div.accordion-me。

答案 1 :(得分:0)

您必须将其绑定到锚标记上的click事件。例如,如果您的标题链接是:

<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;
    }
});