Как я могу заставить ВСЕ ссылки загружать страницы динамически? (Даже ссылки на динамически загружаемых страницах) - PullRequest
2 голосов
/ 17 августа 2010

Итак, у меня есть такой скрипт

    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js">
    </script>
    <script type="text/javascript">
       $(document).ready(function(){
       $("a[href*='http://']:not([href*='"+location.hostname+"'])").attr("target","_blank");

       $("a[target!='_blank'][target!='_top']").click(function(){

       var url=$(this).attr("href")+'?jquery=1';
       ajaxpage(url,'actualcontent');

       window.location.hash=$(this).attr("href");
        return false;
    });


});
    </script>

и это прекрасно работает. Это означает, что все мои ссылки загружаются динамически в DIV - потрясающе. Но ссылки, загруженные в эти div, не загружаются динамически при нажатии. и если я включу в него этот скрипт, он все равно не будет работать. И на аналогичной ноте, есть ли способ заставить javascript на страницах, которые были загружены динамически, работать? Без включения его в оригинальный заголовок?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 августа 2010

Не уверен, в чем ваша проблема.Вы говорите, что ссылки, которые добавляются после этой функции, не используют эту функцию?намекните, вам нужно заново отсканировать страницу, чтобы обновить ссылки в этом разделе ИЛИ вы можете избежать этого и использовать live () .

2 голосов
/ 17 августа 2010

Отказ от ответственности: Чтобы использовать это решение, вам нужно обновить систему до jQuery 1.3 или jQuery 1.4 +
(Но вы должны заметить, что есть много улучшений производительности и ошибкаисправления начиная с 1.2.6)


Вместо .click() вы можете использовать здесь .live(), например:

$("a[target!='_blank'][target!='_top']").live('click', function(){

.live() работает и с динамически добавляемыми элементами, поскольку он прослушивает всплывающее событие click в document, а не является обработчиком для самого элемента.

0 голосов
/ 17 августа 2010

Использовать .delegate ()

// Don't need to put this in a $(document).ready() callback.
$(document).delegate("a[target!='_blank'][target!='_top']", "click", function(e){
    var url=$(this).attr("href")+'?jquery=1';
    ajaxpage(url,'actualcontent');
    window.location.hash=$(this).attr("href");
    e.preventDefault();
    return false;
});

$(document).delegate("a[href*='http://']:not([href*='"+location.hostname+"'])", "click", function(){
    // lazy attr setting, reduces query cost
    $(this).attr("target", "_blank")
});
...