11494 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Avec le jquery ci-dessous et au chargement de ma page HTML, j'attache un CLICK à tous les liens contenant la class 'addelem'. Donc lorsque je clique sur ces liens j'appelle bien ma fonction $.ajax. Jusque là tout fonctionne bien !

Le problème c'est que ma fonction ajax me retourne des liens contenant aussi la class 'addelem' (c'est voulu) mais du coup je n'ai plus le CLICK sur ces liens !!!

Pourquoi ma fonction $(a.addelem) ne se propage pas également à ce que me retourne AJAX ?

Merci de votre aide


jQuery.noConflict();
jQuery(document).ready(function($){
	$('a.addelem').click(function() {
		var affiche = document.getElementById('msg_panier');
		$.ajax({
			type: "GET",
			url: "../include/v1_catalogue_ajax.inc.php",
			data: "panier=true",
			success: function(msg) { 
				var affiche = document.getElementById('msg_panier');
				affiche.innerHTML = msg;
			},
			error: function(xhr,err,e){ alert( "Une erreur est survenue ! " + err ); }
		}); 
		return false;
	});
});


Je pense avoir trouvé !

$('a.addelem').live('click', function() {
...
});

Modifié par Iris (07 Feb 2009 - 12:39)
a écrit :
Pourquoi ma fonction $(a.addelem) ne se propage pas également à ce que me retourne AJAX ?

Parce que cette fonction est exécutée au chargement de la page, probablement via $(document).ready(). Tout contenu rajouté dynamiquement après n'existait bien entendu pas lorsque ta fonction a été exécutée. Donc les liens que tu rajoutes via de la manipulation DOM après coup n'ont aucune raison d'être associés à un gestionnaire d'élément... sauf si tu le demandes à nouveau, de manière explicite.

Attention, la solution que tu as trouvée n'est disponible qu'à partir de jQuery 1.3. Pour les versions précédentes, on peut utiliser le plugin Live jQuery, mais celui-ci n'est pas équivalent en termes de fonctionnalités.
Merci pour la réponse...

a écrit :
sauf si tu le demandes à nouveau, de manière explicite


Dans ma requete ajax (success), comment faire alors pour relancer, de manière explicite, une action déclarée auparavant dans mon jQuery(document).ready(function($) ?

Je mets par exemple $('div').corner(); à l'intérieur de mon 'success' si je veux arrondir toutes mes images ? (dans le cas bien sur ou j'utilise le plugin jquery.corner.js) ?