Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.01.2016, 13:17
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Повторное срабатывание каллбака метода hide()
Написал простенький плагин вкладок. Вопрос снизу в комментарии при вызове плагина.
<div class="tab-section">
    <div class="tabs">
        <a href="0" class="tab tab-current">Самовывоз в Москве</a>
        <a href="1" class="tab">Доставка по Москве</a>
        <a href="2" class="tab">Доставка в регион России</a>
    </div>
    <div class="tab-content">
        Контент Самовывоз в Москве
    </div>
    <div class="tab-content">
        Контент Доставка по Москве
    </div>
    <div class="tab-content tab-section">
        Контент Доставка в регион России
        <div class="tabs">
            <a href="2" class="tab tab-current">Почтой России</a>
            <a href="4" class="tab">Транспортной компанией "Деловые линии"</a>
        </div>
        <div class="tab-content tab-section">
            Почтой России
            <div class="tabs">
                <a href="2" class="tab tab-current">Обычная</a>
                <a href="3" class="tab">Срочная</a>
            </div>
            <div class="tab-content">
                Контент Почтой России Обычная
            </div>
            <div class="tab-content">
                Почтой России Срочная
            </div>
        </div>
        <div class="tab-content tab-section">
            Транспортной компанией "Деловые линии"
            <div class="tabs">
                <a href="4" class="tab tab-current">До терминала</a>
                <a href="5" class="tab">До адреса</a>
            </div>
            <div class="tab-content">
                Транспортной компанией "Деловые линии" До терминала
            </div>
            <div class="tab-section">
                Транспортной компанией "Деловые линии" До адреса
            </div>
        </div>
    </div>
</div>

$.fn.tabs = function (callback, duration) {
    this.find('> .tabs > .tab').on('click', function(event) {
        var tab = $(this);
        var content = tab.addClass('tab-current')
            .siblings('.tab')
            .removeClass('tab-current')
            .closest('.tab-section')
            .find('> .tab-content')
            .eq(tab.index());

        content.show(duration || 0, function() {
            content.siblings('.tab-content').hide(duration || 0, function() {
                if (typeof callback === 'function') {
                    return callback.apply(tab, [content, event]);
                }
            });
        });

        return false;
    });

    var current = window.location.hash;
    var index = 0;

    return this.each(function() {
        if (current) {
            index = $('> .tabs > .tab[href="' + current + '"]', this).index();
        } else {
            index = $('> .tabs > .tab-current', this).index();
        }
        $('> .tabs > .tab', this).eq(index < 0 ? 0 : index).click();
    });
};

$('.tab-section').tabs(function() {
    if (this.is(':visible')) {
        alert(this.text()); //Если кликать по корневым вкладкам (Самовывоз в Москве, Доставка по Москве и Доставка в регион России), то каллбак срабатывает 2 раза, а по всем остальным, которые лежат внутри этих - 1 раз...
    }
});

Последний раз редактировалось project1, 21.01.2016 в 13:27.
Ответить с цитированием
  #2 (permalink)  
Старый 21.01.2016, 14:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

project1,
callback срабатывает для каждого элемента анимации, а не для всех !!!
Ответить с цитированием
  #3 (permalink)  
Старый 21.01.2016, 15:08
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

А как сделать, чтобы 1 раз сработал? Мне нужно чтобы каллбак вкладки сработал 1 раз и только после окончания анимации.
Ответить с цитированием
  #4 (permalink)  
Старый 21.01.2016, 15:13
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Добавил проверку внутри каллбака hide()
if ($(this).is(':last-of-type')) {
    //типа если анимация последней вкладки завершилась и больше не будет вызываться hide(), только в таком случае при нажатии на последнюю вкладку каждый группы, каллбак вообще не срабатывает ((
}

Последний раз редактировалось project1, 21.01.2016 в 15:16.
Ответить с цитированием
  #5 (permalink)  
Старый 21.01.2016, 15:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

project1,
либо условие когда очередь анимаций закончится либо тоже самое но через promise -- оба варианта тут
Почему callback у animate запускается 2 раза?
Ответить с цитированием
  #6 (permalink)  
Старый 21.01.2016, 21:03
Интересующийся
Отправить личное сообщение для project1 Посмотреть профиль Найти все сообщения от project1
 
Регистрация: 06.10.2011
Сообщений: 24

Спасибо, помогло
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События - focusout и click отменить повторное срабатывание функции egorychmaster Элементы интерфейса 1 25.06.2015 13:35
Повторное срабатывание .load() у iframe при смене его src vita1ii Events/DOM/Window 5 09.10.2013 13:49
Вызов метода внутри метода при инициализации плагина SergXP jQuery 0 01.07.2013 22:27
Повторное срабатывание события Vhornets Events/DOM/Window 3 15.12.2012 22:15
Вызов метода из метода qwermjk Общие вопросы Javascript 25 16.10.2012 12:38