11550 sujets

JavaScript, DOM et API Web HTML5

Salut coucou yo!

Je voudrais savoir comment faire pour que mon code jQuery (selecteur).click(function) fonctionne dans un appel Ajax (dans une page appelee avec Ajax).
Modifié par apericube (30 Oct 2009 - 20:03)
Administrateur
Tu peux éventuellement regarder du côté de live() pour déclarer tes événements click, ceux-ci demeurent persistants dans le DOM, donc restent fonctionnels après un nouveau chargement.
Ca marche pas je sais pas pourquoi, voici mon code :

$(".truc").live("click", function(){
     alert('tronconneuse');
});

Ceci s'execute dans mon index.php, ensuite une page est appelee par Ajax dans laquelle il y a un <a href class='truc'>, mais un click sur ce lien ne fait pas apparaitre l'alert JS.

PS: j'ai toujours voulu savoir, dew tu as vraiment cette tete-la en vrai ? Smiley confused
Modifié par apericube (13 Oct 2009 - 22:28)
Salut,

En fait c'est la fonction passé dans live qui modifier le dom. Donc pour toi c'est $.ajax (ou la réponse mais à ce moment il faut utilisé un trigger...).

$(".truc").click(function(){ 
     alert('tronconneuse'); 
}); 
$("a.ajax").live("click", function(){
     $.ajax(...);
});

regarde dans la doc pour d'autre exemple
D'apres ce que j'ai compris la fonction passee dans live() c'est ce qu'on veut voir marcher apres modification du DOM (mais qui, sans live, marche plus). Donc je comprend pas ce que tu dis jo_link_noir Smiley ohwell

En fait j'ai un popup jquery qui apparait en cliquant sur un lien, le contenu de ce popup etant une page appelee avec Ajax. Dans cette page se trouvent des liens associes a des actions jQuery, qui pour l'instant ne marchent pas.

Je trouve ca chelou que jQuery inclue pas une solution ultra-simple pour resoudre ce type de probleme bateau. Je veux dire, Ajax est si facile avec jQuery! Pourquoi c'est pas le cas aussi pour ce probleme-la ?
Ah oui autant pour moi.

Bah je sais pas ça devrait marché, t'as une page en ligne pour voir ?
Modifié par jo_link_noir (28 Oct 2009 - 02:05)
Hello,

Si la popup jQuery est une nouvelle fenêtre du navigateur ou une iframe, il s'agit alors d'un autre document qui n'est pas concerné par les événements jQuery du premier document.

Si ce n'est pas le cas, il faudrait en effet que tu nous montres un exemple du problème.
Salut,

Non c'est juste un appel Ajax c'est tout. Dans cette page Ajax j'ai par exemple un lien HREF CLASS='TRUC', et dans le jQuery de ma page principale j'ai du JS associe a cette classe 'TRUC', genre :

$(document).ready(function () {
$(".truc").click(function(){
alert ('mais OUAIS!');
});
});

Si le lien HREF CLASS='TRUC' est placé dans ma page principale, l'alert() se declenche, mais si le lien est dans une page appelee avec Ajax, il s'execute pas.

Je comprend bien pourquoi, parce que du point de vue de jQuery le (document).ready c'est la page principale et elle seule, alors que la page Ajax est un autre document.

Mais je dois faire quoi exactement avec live() ? J'ai essaye de faire comme expliqué dans leur exemple mais ca marche pas chez moi.
apericube a écrit :
alors que la page Ajax est un autre document

Oui mais non. Ton contenu récupéré en Ajax est utilisé pour modifier le document existant. Ça n'explique pas ton problème.

apericube a écrit :
Mais je dois faire quoi exactement avec live() ?

Bah, à priori, comme dans la doc.

À vérifier:
- Tu utilises bien jQuery 1.3+?
- Erreurs JS?
- Un problème avec le contenu inséré dans la page (DOM bien construit, pas de souci avec la classe "truc")?
Salut !
J'avais le même problème que apericube...
Et effectivement la fonction live() résoud le problème.

Petit exemple :
Avant :

$("a.link").click(function () {
             alert("qqc");
});

Après :

$("a.link").live("click", function(){
             alert("qqc");
});


Voila =)
Si ca peut servir c'est bien !
Florent : effectivement avec la version 1.3 ca marche BEAUCOUP MIEUX !

Je pensais que la 1.3 n'etait pas requise a cause d'une phrase dans la doc de live() : "Added in jQuery 1.3: Binds a handler to an event ...", me laissant entendre que live() existait et fonctionnait deja avant la 1.3.

Merci en tout cas.
C'est tout le contraire. En fait le nom de la méthode (titre de la page) est implicite:
a écrit :
Added in jQuery 1.3: [The live() method] binds a handler to an event ...

La barrière de la langue. Smiley cligne