1

J’attache un handler sur l’événement click de certains éléments de mon DOM grâce à un code ressemblant à ceci :
$(document).ready(function() {
  $(".truc").click(function(event) { ... });
});


Quand l’utilisateur clique ensuite sur certains boutons, des éléments peuvent être insérés dans le DOM, par exemple des éléments dont class="truc". Si, ensuite, l’utilisateur clique sur ces éléments, le handler que j’avais installé au début ne sera pas exécuté. Suis-je obligé de rattacher un handler à chaque fois que j’insère un élément dont class="truc" ?

Autre question : j’ai besoin, pour réaliser une requête AJAX, de l’identifiant d’une ressource affichée dans la page. Seulement cet identifiant n’est pas affiché lui. Comment le retrouver ? Je verrais bien un <span style="display: none;">id</span>, mais je trouve ça un peu laid, y a-t-il une solution plus propre ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

2

Sasume (./1) :
J’attache un handler sur l’événement click de certains éléments de mon DOM grâce à un code ressemblant à ceci :
$(document).ready(function() {
  $(".truc").click(function(event) { ... });
});

Quand l’utilisateur clique ensuite sur certains boutons, des éléments peuvent être insérés dans le DOM, par exemple des éléments dont class="truc". Si, ensuite, l’utilisateur clique sur ces éléments, le handler que j’avais installé au début ne sera pas exécuté. Suis-je obligé de rattacher un handler à chaque fois que j’insère un élément dont class="truc" ?
Oui, car un gestionnaire d'événements n'est attaché qu'à un seul objet. jQuery te permet d'attacher un gestionnaire d'événements à plusieurs objets d'un coup, mais c'est un raccourci (enfin, il fait un peu plus que ça, même ^^). De toutes façons, cela ne prend qu'une ligne de code.
Il te suffira de déclarer ta fonction de gestion des événements de manière un peu plus globale et hop… #ouI#
Autre question : j’ai besoin, pour réaliser une requête AJAX, de l’identifiant d’une ressource affichée dans la page. Seulement cet identifiant n’est pas affiché lui. Comment le retrouver ? Je verrais bien un <span style="display: none;">id</span>, mais je trouve ça un peu laid, y a-t-il une solution plus propre ?
Pas compris… Tu fais référence à l'identifiant HTML/XML/XHTML ?
Si oui, je ne comprends pas ce qui t'empêche de le connaître… confus
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

3

{ ... }); au lieu de $(".truc").click(function(event). }); fait $(".truc").live("click",function(event) { ..

autrement, tu va devoir faire un "detach" de l'évent, puis le réactiver à chaque modification du dom
et la le mec il le pécho par le bras et il lui dit '

4

GoldenCrystal (./2) :
De toutes façons, cela ne prend qu'une ligne de code.Il te suffira de déclarer ta fonction de gestion des événements de manière un peu plus globale et hop… #ouI#
Comment ça de manière un peu plus globale ? De toute façon elle est déjà globale cette fonction.
Ce qui est chiant c’est que j’ai plusieurs éléments auxquels j’attache un gestionnaire d’événement, donc à chaque fois que j’ajoute un de ces éléments dans le DOM il faut que je lui attache son gestionnaire…
Du coup ça me donne envie de faire du mootools, ce serait bien plus simple avec ça…
Autre question : j’ai besoin, pour réaliser une requête AJAX, de l’identifiant d’une ressource affichée dans la page. Seulement cet identifiant n’est pas affiché lui. Comment le retrouver ? Je verrais bien un <span style="display: none;">id</span>, mais je trouve ça un peu laid, y a-t-il une solution plus propre ?
Pas compris… Tu fais référence à l'identifiant HTML/XML/XHTML ?
Si oui, je ne comprends pas ce qui t'empêche de le connaître… confus
Non non, ce n’était pas très clair en effet, je faisais référence à un identifiant qui me permet d’identifier la ressource côté serveur (un identifiant de base de données par exemple). Je dois fournir cet identifiant dans les paramètres de ma requête.
r043v (./3) :
{ ... }); au lieu de $(".truc").click(function(event). }); fait $(".truc").live("click",function(event) { ..

autrement, tu va devoir faire un "detach" de l'évent, puis le réactiver à chaque modification du dom
Modification du nom ? Du nom de quoi ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

5

Sasume (./4) :
Comment ça de manière un peu plus globale ? De toute façon elle est déjà globale cette fonction.
Rapport à $(".truc").click(function(event) { ... }); où la fonction est pas vraiment réutilisable. tongue
Du coup ça me donne envie de faire du mootools, ce serait bien plus simple avec ça…
Non, regarde la réponse de r043v ^^
J'avoue, je ne connaissais pas jQuery.live, j'ai appris un truc aussi. grin
(D'un autre côté je n'en ai pas non plus eu besoin pour l'instant ^^)
Non non, ce n’était pas très clair en effet, je faisais référence à un identifiant qui me permet d’identifier la ressource côté serveur (un identifiant de base de données par exemple). Je dois fournir cet identifiant dans les paramètres de ma requête.
Hmm, pour ça moi je nomme mes éléments HTML. Par exemple si les données sont des voitures: <tr id="car_1">...</tr><tr id="car_12">...</tr><tr id="car_30">...</tr>
Modification du nom ? Du nom de quoi ?
C'est modification du DOM, qu'il a écrit. cheeky
En tout cas, bien vu. ^^
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

6

Aïe aïe, j’ai écrit n’importe quoi ce matin…
Je viens de regarder la doc de jQuery.live, effectivement ça fait ce que je veux, donc pour l’instant je vais utiliser ça.
Merci pour le reste !
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »