Показать сообщение отдельно
  #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.
Ответить с цитированием