Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Выполнение JS в страницах подгруженных через ajax (https://javascript.ru/forum/jquery/57189-vypolnenie-js-v-stranicakh-podgruzhennykh-cherez-ajax.html)

Mikhail1989 27.07.2015 11:34

рони,
плагин jScrollPane (http://jscrollpane.kelvinluck.com/)
пытаюсь инициализировать его так
$('.scroll-pane').jScrollPane();

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

рони 27.07.2015 11:43

Цитата:

Сообщение от Mikhail1989
$('.scroll-pane').jScrollPane();

а разве не так ?
$(function()
			{
				$('.scroll-pane').jScrollPane();
			});
или лучше так
$(window).load(function()
			{
				$('.scroll-pane').jScrollPane();
			});

рони 27.07.2015 11:50

Mikhail1989,
если изменилось содержание одного $('.scroll-pane') ;
после того как загрузили новое содержимое сделать так
var api = $('.scroll-pane').data('jsp');
api.reinitialise();
если елементов много обойти циклом все
пример http://jscrollpane.kelvinluck.com/dynamic_height.html

Mikhail1989 27.07.2015 15:32

Цитата:

Сообщение от рони (Сообщение 381672)
Mikhail1989,
если изменилось содержание одного $('.scroll-pane') ;
после того как загрузили новое содержимое сделать так
var api = $('.scroll-pane').data('jsp');
api.reinitialise();
если елементов много обойти циклом все
пример http://jscrollpane.kelvinluck.com/dynamic_height.html

извините за глупость, но это выполнять надо в основном файле или в подгружаемом, уже по всякому перепробовал, результат нет:help:
ps. и вот что интересно если нажать на ссылку повторно, то срабатывает как надо, при
$('.scroll-pane').jScrollPane();

рони 27.07.2015 16:29

Mikhail1989,
это api.reinitialise(); или это $('.scroll-pane').jScrollPane(); надо ставить в то что у вас подгружает контент

Mikhail1989 27.07.2015 16:49

рони,
если так
$(document).on('click', 'a', function(e){
                    e.preventDefault();
                    var link = $(this).attr('href');
                    var api = $('.scroll-pane').data('jsp');
                    $.ajax({
                        type:'post',
                        url: link,
                        success: function(mes){
                          $('#content').prev('.slider').hide();
                            $('#content').html(mes);
                            api.reinitialise();
                        }
                    })
                })

то в консоли
TypeError: api is null
api.reinitialise();

если так
$(document).on('click', 'a', function(e){
                    e.preventDefault();
                    var link = $(this).attr('href');
                    $.ajax({
                        type:'post',
                        url: link,
                        success: function(mes){
                          $('#content').prev('.slider').hide();
                            $('#content').html(mes);
                            $('.scroll-pane').jScrollPane();
                            
                        }
                    })
                })

то срабатывает, но прокрутка не действует до конца, а если нажать на ссылку повторно, то уже все работает как надо

рони 27.07.2015 17:43

Mikhail1989,
$(window).on('resize', function() {
   $('.scroll-pane').each( function() {
     var api = $(this).data('jsp');
    if(api) {api.reinitialise()}
    else {
      $(this).jScrollPane();
    }

}  )


})

$(document).on('click', 'a', function(e){
                    e.preventDefault();
                    var link = $(this).attr('href');
                    $.ajax({
                        type:'post',
                        url: link,
                        success: function(mes){
                          $('#content').prev('.slider').hide();
                            $('#content').html(mes);
                            $(window).resize()

                        }
                    })
                })

Mikhail1989 27.07.2015 23:08

рони,
спасибо, но все никак не работает.
постоянно срабатывает это условие
else {
$(this).jScrollPane();
	    }

и как результат не полная прокрутка подгруженного материала

Mikhail1989 28.07.2015 14:02

Цитата:

Сообщение от рони (Сообщение 381740)
Mikhail1989,
$(window).on('resize', function() {
   $('.scroll-pane').each( function() {
     var api = $(this).data('jsp');
    if(api) {api.reinitialise()}
    else {
      $(this).jScrollPane();
    }

}  )


})

$(document).on('click', 'a', function(e){
                    e.preventDefault();
                    var link = $(this).attr('href');
                    $.ajax({
                        type:'post',
                        url: link,
                        success: function(mes){
                          $('#content').prev('.slider').hide();
                            $('#content').html(mes);
                            $(window).resize()

                        }
                    })
                })

поменял resize на scroll работает, но как-то это не совсем красиво выглядит

хотя, нормально вроде, спасибо

Mikhail1989 31.07.2015 12:54

рони,
подсобите еще пожалуйста, опять проблема по этому скрипту, на одной из подгружаемых страниц есть свои обработчики для ссылок, но этот обработчик же действует, и на них тоже. Как его можно отключить перед выполнением нужных мне обработчиков. Пробовал .ubind() .off() не получилось, наверно, не туда их добавляю.


Часовой пояс GMT +3, время: 13:26.