2010-08-17 6 views
2

J'ai un script comme celui-ciComment faire pour que TOUS les liens chargent des pages dynamiquement? (Même les liens dans les pages chargées dynamiquement)

<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> 

et il fonctionne très bien. Cela signifie que tous mes liens se chargent dynamiquement dans le DIV - génial. Mais, les liens chargés dans ces div, ne se chargent pas dynamiquement lorsqu'on clique dessus. et si j'inclue ce script dedans, ça ne marche toujours pas. Et sur une note similaire, existe-t-il un moyen de rendre javascript dans les pages, qui ont été chargées dynamiquement, de travailler? Sans l'inclure dans l'en-tête d'origine?

Merci.

Répondre

2

Avertissement:Pour utiliser cette solution, vous devez passer à jQuery 1.3 ou jQuery 1.4+
(Mais vous devriez, il y a de nombreuses améliorations de performances et corrections de bugs depuis 1.2.6)


Au lieu de .click() vous pouvez utiliser .live() ici, comme ceci:

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

.live() fonctionne également sur les éléments ajoutés dynamiquement, car il écoute l'événement click bouillonnant à document, plutôt que d'être un gestionnaire sur l'élément lui-même.

+0

me semble toujours avoir le même problème? Ce script doit-il être inclus sur les pages nouvellement chargées? – Tom

+0

@Tom - Non, juste sur la page principale ... mais comme je l'ai dit, vous utilisez jQuery 1.2.6 qui n'a pas '.live()', vous devrez mettre à jour pour l'utiliser. –

+2

Il est utile d'expliquer ce que fait la fonction live(). De la documentation: "Attacher un gestionnaire à l'événement pour tous les éléments qui correspondent au sélecteur actuel, maintenant ou dans le futur". Ceci est différent de la fonction click(), car elle est uniquement attachée à tous les liens hypertexte actuels. – Marc

2

Vous ne savez pas quel est votre problème. Vous dites que les liens qui sont ajoutés après cette fonction n'utilisent pas cette fonction? indice, vous devez rescanner la page pour mettre à jour les liens dans ce div OU vous pouvez éviter cela et utiliser live().

0

Utilisez .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") 
}); 
Questions connexes