2010-05-06 5 views
3

Je suis très nouveau dans jQuery, Ajax et des choses comme celles-ci. J'ai trouvé des solutions sur la façon d'injecter des fragments HTML dans mon site:chargement de fragments HTML avec jQuery

$(document).ready(function(){ 
    $('a').click(openContent); //binding all anchors to this function 
}); 

function openContent(){ 
var path = $(this).attr('href'); 
$('#content').load(path); 

return false; //to prevent browser from loading the single HTML fragment 
} 

Cela fonctionne très bien! Le problème est que ces fonctions ne seront pas exécutées en cliquant sur les ancres situées dans le nouveau fragment HTML qui ont été injectées juste avant. Donc, le fragment ne sera pas injecté dans div, le navigateur chargera seulement le fragment pour lui-même.

espoir il existe des solutions qui ne sont pas que délicate ... merci



MISE À JOUR:
Ok, vivre fait un bon travail mais,

il sont également des images connectées au plugin jQuery lightbox (balupton-edition) avec rel = "lightbox-tour" dans ces fragments. Ils sont affichés dans une nouvelle fenêtre au lieu de la lightbox-div. Aucune suggestion?

+0

Avez-vous essayé d'ajouter $ ('# content a'). Click (openContent); juste avant le retour faux; ? – Adam

+0

oui, essayé ... n'a pas fonctionné – sam

Répondre

5

utilisation en direct, qui va se lier à chaque point d'ancrage qui est ajoutée:

$('a').live('click',openContent); 
+0

putain ... c'est facile et fonctionne très bien! Merci mec! – sam

+0

mais il y a aussi des images connectées au plugin jQuery lightbox (balupton-edition) avec rel = "lightbox-tour" dans ces fragments. Ils sont affichés dans une nouvelle fenêtre au lieu de la lightbox-div. – sam

+0

Cool –

1

également dans jQuery 1.4+ vous pouvez utiliser
$(document).delegate('a', 'click', openContent);

* La principale différence entre en direct et délégué, en direct Attache des événements au document et gère les événements une fois qu'ils ont éclaté. Avec le délégué, vous pouvez spécifier le contexte dans lequel attacher l'événement. L'exemple ici est exactement le même que l'utilisation en direct. Maintenant Disons que vous ne vouliez que des ancres apparues dans une div avec un identifiant de "contentArea" pour charger du contenu dans ce manoir. Dans ce cas, vous écrivez $("#contentArea").delegate('a', 'click', openContent);.

Pour en savoir plus sur les différences entre en direct et déléguer vérifier Quick Tip: The Difference Between Live() and Delegate()

+0

Ce serait une réponse plus utile si vous expliquiez la différence entre 'live' et' delegate', surtout si vous incluez un contexte différent de 'live' (votre code devrait être identique dans la fonctionnalité à celle dans la réponse de Derek). – eyelidlessness

+2

Super point, mis à jour ma réponse – joshatjben

+0

J'ai essayé délégué, mais le fragment ne sera pas affiché dans la boîte div – sam

0

Ainsi, la visionneuse gère pas les liens chargés dynamiquement? Vous pouvez mettre à jour votre code pour réexécuter le plugin lightbox dans le rappel de chargement. Quelque chose comme ceci:

$(document).ready(function(){ 
    $('a').live('click', openContent); 
}); 

function openContent(){ 
    var path = $(this).attr('href'), 
     content = $('#content'); 

    // added callback here 
    content.load(path, function() { 
     content.lightbox(); 
    }); 

    return false; 
}