2015-05-10 2 views
-1

У меня есть этот код, который превращает ссылки youtube в embeds, однако я сделал ajax-пейджер для своих потоков в форуме, и теперь, когда я перехожу на другую страницу, ссылки больше не превращаются в вложения (это drupal и view pager). Что с этим делать?Код не работает с ajax pager

<script> 
$(function() { 
    $("a:contains('youtu')").each(function() { 
     var yt_url = this.href, 
      yt_id = yt_url.split('?v=')[1], 
      yt_title = $(this).text(); 
     $(this).replaceWith('<div class="youtube-box" style="background-image:url(http://img.youtube.com/vi/' + yt_id + '/0.jpg);"><span class="youtube-title">' + yt_title + '</span><span class="youtube-bar"><span class="yt-bar-left"></span><span class="yt-bar-right"></span></span><span class="youtube-play">Start</span></div>'); 
     $('div.youtube-box').click(function() { 
      $(this).replaceWith('<iframe class="youtube-frame" src="http://www.youtube.com/embed/' + yt_id + '" allowfullscreen></iframe>'); 
     }); 
    }); 
}); 
</script> 

ответ

0

Это потому, что ваш javascript запускается при загрузке страницы, но не после вызова ajax. Вы должны использовать drupal behaviors. Функции в объекте поведения drupal запускаются при загрузке страницы и после завершения аякс-вызовов.
Делают это так:

(function($) { 
     Drupal.behaviors.mybehavior = { 
     attach:function(context, settings){ 

      $("a:contains('youtu')", context).each(function() { 
       var yt_url = this.href, 
        yt_id = yt_url.split('?v=')[1], 
        yt_title = $(this).text(); 
       var newstuff = $('<div class="youtube-box" style="background-image:url(http://img.youtube.com/vi/' + yt_id + '/0.jpg);"><span class="youtube-title">' + yt_title + '</span><span class="youtube-bar"><span class="yt-bar-left"></span><span class="yt-bar-right"></span></span><span class="youtube-play">Start</span></div>'); 
       newstuff.click(function() { 
        $(this).replaceWith('<iframe class="youtube-frame" src="http://www.youtube.com/embed/' + yt_id + '" allowfullscreen></iframe>'); 
       }); 
       $(this).replaceWith(newstuff); 
      }); 
     } 
     }; 
})(jQuery); 

Я также изменил код немного, чтобы сохранить новое содержание в переменную таким образом, чтобы не использовать JQuery, чтобы выбрать его снова.
Это все непроверено.