Пользовательский интерфейс JQuery: Аккордеонные обратные вызовы - PullRequest
0 голосов
/ 24 марта 2010

Мне нужен мой javascript для выполнения обратного вызова, только когда я ОТКРЫВАЮ раздел на аккордеоне, сейчас он выполняет обратный вызов, когда я открываю ИЛИ закрываю раздел, потому что я использую только функцию щелчка. Есть ли способ, которым я могу изменить свою существующую функцию щелчка, чтобы она запускалась только при активизации данного раздела?

Моя текущая функция нажатия:

$("a#mimetypes").click(function() {
    $("span#mimetypesthrobber").loading(true, { max: 1500 })
    $.getJSON("../mimetypes", function(data) {
        //callback
    });
});

Спасибо!

EDIT:

Я уже пробовал это с другой частью аккордеона, и она не работала должным образом:

$('.ui-accordion').bind('accordionchange', function(event, ui) {
if (ui.newHeader == "Encoders") {
EncodersGet();
}
});

Ответы [ 3 ]

2 голосов
/ 24 марта 2010

вы можете использовать « событие изменения »

$('.ui-accordion').bind('accordionchange', function(event, ui) {
  ui.newHeader // jQuery object, activated header
  ui.oldHeader // jQuery object, previous header
  ui.newContent // jQuery object, activated content
  ui.oldContent // jQuery object, previous content
});

и, например, получить доступ к "newHeadert" и выполнить обработку

EDIT

в соответствии с новой информацией {collapsible: true, active: false}

$(document).ready(function() {
            var $acc = $('#accordion').accordion({ collapsible: true,
                   active : false ,
                   change : function (event, ui)
                   {
                                var index = $acc.accordion( "option", "active");
                    if( index === false){
                                 // all are close
                                }
                                else{
                                 // 0-based index of the open section
                                }

                   }
            });
        });

«опция, активная» вернет вам индекс открытого раздела или «ложь», если все разделы закрыты

1 голос
/ 30 мая 2012

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

if (index === false) {
  // All are closed
} else {
  // 0-based index of the open section
}

Пожалуйста, помните, что двойное равенство будет выполнять преобразование типов при оценке условий.

0 голосов
/ 24 марта 2010

Если все секции аккордеона закрыты dfault, вы можете заменить событие щелчка переключателем, и вторая функция просто ничего не делает.

$("a#mimetypes").toggle(function() {
    $("span#mimetypesthrobber").loading(true, { max: 1500 });
    $.getJSON("../mimetypes", function(data) {
        //callback 
    });
},
function() {
    //do nothing
});

Лучшим решением было бы добавить класс в активный раздел и проверить его перед вызовом нагрузки.

$("a#mimetypes").click(function() {
    if ($(this).hasClass("active")) {
        $(this).removeClass("active");
    }
    else {
        $(".active").removeClass("active"); //Edit - remove all active classes to account for this section being closed by the opening of another
        $(this).addclass("active");

        $("span#mimetypesthrobber").loading(true, { max: 1500 });
        $.getJSON("../mimetypes", function(data) {
            //callback 
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...