Выполнение JS в страницах подгруженных через ajax
Подскажите как можно сделать. Есть такой скрипт
$(document).ready(function(){ $('a').click(function(e){ e.preventDefault(); var link = $(this).attr('href'); $.ajax({ type:'post', url: link, success: function(mes){ $('#content').html(mes); } }) }) }) Который находится на странице и подгружает в определенный блок различные html страницы. Как можно сделать чтобы этот скрипт работал также и в подгружаемом блоке?:help: |
Добавить данный скрипт в подгружаемые страницы. Иначе исходный скрипт не увидит искомые объекты в подгруженной странице.
|
А вообще интересная задача. Получается, нужно, чтобы в блоке #content ссылки также открывали страницы в этом же блоке #content. Похоже на обычный iframe.
|
Цитата:
|
Mikhail1989,
ставить клик на документ а не на ссылку $(document).on('click', 'a' , function(e){}) |
Цитата:
Извините, а не можете ли Вы подсказать как в ajax подгружать выполнение скриптов. Есть подгружаемый контент в котором элементы должны обрабатываться скриптами, но этого не происходит, так как скрипты загруженные при начальной загрузке сайта, не распространяются на контент подгруженный через ajax. |
Цитата:
|
Цитата:
<? if($_POST['a']) exit( '<div id=as></div> <script> $(function() { $("#as").text("Опаньки!").css({color:"#f00"}) }); </script>' ) ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js" type="text/javascript"></script> <script> $(function() { $.post(location, {a:1}, function(d) { $('body').append(d) }, 'html') }); </script> </head> <body> </body> </html> |
Цитата:
|
Mikhail1989,
а как до того , что и чем инициализировали ? у хороших плагинов есть refresh |
рони,
плагин jScrollPane (http://jscrollpane.kelvinluck.com/) пытаюсь инициализировать его так $('.scroll-pane').jScrollPane(); но срабатывает он почему то частично, т.е. полоса прокрутки изменяется, но до конца не прокручивается контент. |
Цитата:
$(function() { $('.scroll-pane').jScrollPane(); });или лучше так $(window).load(function() { $('.scroll-pane').jScrollPane(); }); |
Mikhail1989,
если изменилось содержание одного $('.scroll-pane') ; после того как загрузили новое содержимое сделать так var api = $('.scroll-pane').data('jsp'); api.reinitialise(); если елементов много обойти циклом все пример http://jscrollpane.kelvinluck.com/dynamic_height.html |
Цитата:
ps. и вот что интересно если нажать на ссылку повторно, то срабатывает как надо, при $('.scroll-pane').jScrollPane(); |
Mikhail1989,
это api.reinitialise(); или это $('.scroll-pane').jScrollPane(); надо ставить в то что у вас подгружает контент |
рони,
если так $(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(); } }) }) то срабатывает, но прокрутка не действует до конца, а если нажать на ссылку повторно, то уже все работает как надо |
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() } }) }) |
рони,
спасибо, но все никак не работает. постоянно срабатывает это условие else { $(this).jScrollPane(); } и как результат не полная прокрутка подгруженного материала |
Цитата:
хотя, нормально вроде, спасибо |
рони,
подсобите еще пожалуйста, опять проблема по этому скрипту, на одной из подгружаемых страниц есть свои обработчики для ссылок, но этот обработчик же действует, и на них тоже. Как его можно отключить перед выполнением нужных мне обработчиков. Пробовал .ubind() .off() не получилось, наверно, не туда их добавляю. |
Mikhail1989,
установите разные классы и назначьте через класс клики |
Цитата:
|
рони,
снова обращаюсь к вам за помощью, никак не могу реинициализировать еще один плагин - PrettyPhoto. Пробую после загрузки контента вставить вот это $("a[rel^='prettyPhoto']").prettyPhoto();но результата никакого |
Цитата:
|
Цитата:
подгружаю через все тот же скрипт добавив в success, вот это $("a[rel^='prettyPhoto']").prettyPhoto();для реанициализации $(document).on('click', '.link', function(e){ e.preventDefault(); var link = $(this).attr('href'); if (link == 'index.html') {$('#content').prev('.slider').show();} else { $.ajax({ type:'post', url: link, success: function(mes){ $('#content').prev('.slider').hide(); $('#content').html(mes); $("a[rel^='prettyPhoto']").prettyPhoto(); $(window).scroll() } })} }) и гружу файл с галлереей <div class="gal1"> <div class="photo1"><a href="large1.jpg" rel="prettyPhoto[pp_gal1]" title="Фото1"><img src="foto/small1.jpg"><span></span></a></div> </div> <div class="gal1"> <div class="photo1"><a href="large2.jpg" rel="prettyPhoto[pp_gal1]" title="Фото2"><img src="foto/small2.jpg"><span></span></a></div> </div> <div class="gal1"> <div class="photo1"><a href="large3.jpg" rel="prettyPhoto[pp_gal1]" title="Фото3"><img src="foto/small3.jpg"><span></span></a></div> </div> но результата нет, т.е. файл подгружается а изображений нет |
Цитата:
|
Цитата:
:help: |
Цитата:
|
рони,
а можно как-то прокачать этот скрипт $(document).on('click', '.link', function(e){ e.preventDefault(); var link = $(this).attr('href'); if (link == 'index.html') {$('#content').prev('.slider').show();} else { $.ajax({ type:'post', url: link, success: function(mes){ $('#content').prev('.slider').hide(); $('#content').html(mes); $("a[rel^='prettyPhoto']").prettyPhoto(); $(window).scroll() } })} }) чтобы не только можно было бы подгружать файл целиком, но и отдельные контейнеры, видел что как-то через rel делают, но так и не смог прикрутить. Нет ли у вас каких-нибудь идей по этому поводу? |
Цитата:
а $.load --где можно указать куда грузить а после загрузки какую часть загруженнного добавлять. http://api.jquery.com/load/ |
Цитата:
|
Цитата:
|
Mikhail1989,
вам нужен либо телепат, либо специалист ... увы ничем более помочь не могу |
Цитата:
$('#content').load('full_news.html #link2'); и в ней грузится информация только из #link2, а надо чтобы как-то так было: var a = '#'+$(this).attr('rel'); $('#content').load('full_news.html a'); но это соответственно не работает, может есть какой-нибудь вариант решения? |
Цитата:
$('#content').load('full_news.html ' + a); |
Цитата:
|
Часовой пояс GMT +3, время: 13:02. |