JscrollPane Div не работает, когда вызываются дочерние элементы Div

Использование JscrollPane в "главном" div, а также содержимое в дочерних div ах внутри этого div. Я использую jquery show/hide, чтобы загрузить контент onClick, но дочерний div не появится. Если я удаляю JscrollPane, он работает нормально:(

HTML:

<h3 onclick="internalNav('testTwo')">Click to see Div Two</h3>
       <div id="content" class="scroll-pane">
            <div id="testOne">
                <h1>Title 1</h1>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
            do eiusmod tempor incididunt ut labore et dolore magna
            aliqua. Ut enim ad minim veniam, quis nostrud exercitation
            ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
            </div>

            <div id="testTwo">
                <h1>Title 1/h1>
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
            do eiusmod tempor incididunt ut labore et dolore magna
            aliqua. Ut enim ad minim veniam, quis nostrud exercitation
            ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
            </div>
        </div>

JS

$(document).ready(function(){

    //Hide all divs, then show first div
    $("#content > div").hide()
    $("#content > div:first").show()

$(function(){
    $('.scroll-pane').jScrollPane();
});

});


function internalNav(divId) {

    $("#content > div").not('#' + divId).hide()
    $('#' + divId).fadeIn()


}

Я не вижу, что здесь не так!

1 ответ

Вам необходимо повторно инициализировать jScrollPane после изменения содержимого внутри него (или изменения видимости этого содержимого). Вот пример:

http://jscrollpane.kelvinluck.com/invisibles.html

Кроме того, я заметил, что у вас есть $(function() блок внутри document.ready блок. Вам не нужен этот дополнительный блок - вы можете просто применить jScrollPane напрямую, так как вы уже внутри document.ready блок

Как примечание, использование атрибута onclick в вашем h3 не считается лучшей практикой. Вместо этого вы можете добавить прослушиватель событий с помощью jQuery. Это пример, показывающий как повторную инициализацию, так и использование более чистой привязки событий:

$('.internal-nav').bind(
    'click',
    function(e)
    {
        var divId = $(this).attr('rel');
        // Notice no spaces around the ">" - this will help if you have nested divs
        $("#content>div").not('#' + divId).hide(); 
        $('#' + divId).fadeIn(
            function()
            {
                $('.scroll-pane').jScrollPane()
            }
        );

    }
);

С заменой h3 из вашего HTML на:

<h3 class="internal-nav" rel="testTwo">Click to see Div Two</h3>
Другие вопросы по тегам