jquery en passant $ (this) à d’autres fonctions

Haute!

Ce que je veux faire est la suivante: j’ai une table avec un onclick attaché à un lien qui réside dans la table d’une ligne paire. chaque ligne impaire est cachée. En un clic sur ce lien, la ligne impaire apparaît et les données sont chargées dans cette ligne. Fonctionne bien

Maintenant, ce que je veux faire, c’est que chaque fois que ce processus est terminé, je veux attacher une nouvelle fonction de clic à ce lien qui rend la ligne masquée à nouveau. Un peu comme basculer, mais avec un peu plus puis juste afficher / masquer les fonctionnalités. J’ai essayé de faire cela avec le code suivant, mais je ne peux pas le faire fonctionner.

Il me manque sûrement quelque chose de très basique ou tout simplement je ne sais pas assez bien (ce qui est très bien possible, car je viens de commencer il y a quelques semaines).

$(document).ready(function(){ // The version icons $("a.version").click(function () { var sLink = $(this).attr("href"); var nexttr = $(this).parent().parent().next("tr.version"); var nexttrtd = nexttr.find("td:first"); $.get(sLink, function(sData){ nexttrtd.html(sData); nexttr.show(); }); $(this).click(function(){ attachHideMyChildren(); }); return false; }); }); function attachShowMyChildren() { var sLink = $(this).attr("href"); var nexttr = $(this).parent().parent().next("tr.version"); var nexttrtd = nexttr.find("td:first"); $.get(sLink, function(sData){ nexttrtd.html(sData); nexttr.show(); }); $(this).click(function(){ attachHideMyChildren(); }); return false; } function attachHideMyChildren() { $(this).parent().parent().next("tr.version").hide(); $(this).click(function(){ attachShowMyChildren(); }); } 

Il ouvre la ligne du tableau, insère les données mais n’attache pas la fonction pour refermer la ligne. Comment puis-je obtenir que cela se produise?

Des idées?

Le problème est le suivant:

 $(this).click(function(){ attachHideMyChildren(); }); 

Lorsque vous appelez une fonction de cette façon, this devient une window . Au lieu de cela, faites ceci:

 $(this).click(attachHideMyChildren); 

En outre, vous ajoutez des gestionnaires click() sans supprimer les anciens.

Cela étant dit, il existe un moyen plus simple de procéder.

 $("a.version").click(function() { var next = $(this).closest("tr").next(); if (next.is(":hidden")) { $.get($(this).attr("href"), function(sData) { next.find("td:first").html(sData); next.show(); }); } else { next.hide(); } return false; }); 

devrait sur le faire.