2010-01-10 10 views
2

High! Ce que je veux faire est le suivant: J'ai une table avec un onclick attaché à un lien qui réside dans la table d'une ligne paire. chaque rangée impaire est cachée. en cliquant sur ce lien, la ligne impaire est affichée et les données sont chargées dans cette ligne. Fonctionne bien

Maintenant ce que je veux faire est que chaque fois que ce processus est fait, je veux attacher une nouvelle fonction de clic à ce lien qui rend la ligne cachée à nouveau. Un peu comme à bascule, mais avec un peu plus, puis juste afficher/cacher les fonctionnalités. J'ai essayé de le faire avec le code suivant, mais je n'arrive pas à le faire fonctionner.

Je manque sûrement quelque chose de très basique ou je ne sais pas assez bien jquery (ce qui est très bien possible, parce que 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 cela?

Des idées?

Répondre

5

Le problème est le suivant:

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

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

$(this).click(attachHideMyChildren); 

De plus, vous ajoutez click() gestionnaires sans enlever les anciens.

Cela étant dit, il existe un moyen plus simple de le faire.

$("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 le faire.

+0

sainte merde! ça l'a fait. Merci, Cletus. –